summaryrefslogtreecommitdiffstats
path: root/kernel/exit.c
diff options
context:
space:
mode:
authorOleg Nesterov2006-03-29 02:11:26 +0200
committerLinus Torvalds2006-03-29 04:36:44 +0200
commit4a2c7a7837da1b91468e50426066d988050e4d56 (patch)
treee7e321e1a61b934e3c0d938360cc4b990407fcea /kernel/exit.c
parent[PATCH] pids: kill PIDTYPE_TGID (diff)
downloadkernel-qcow2-linux-4a2c7a7837da1b91468e50426066d988050e4d56.tar.gz
kernel-qcow2-linux-4a2c7a7837da1b91468e50426066d988050e4d56.tar.xz
kernel-qcow2-linux-4a2c7a7837da1b91468e50426066d988050e4d56.zip
[PATCH] make fork() atomic wrt pgrp/session signals
Eric W. Biederman wrote: > > Ok. SUSV3/Posix is clear, fork is atomic with respect > to signals. Either a signal comes before or after a > fork but not during. (See the rationale section). > http://www.opengroup.org/onlinepubs/000095399/functions/fork.html > > The tasklist_lock does not stop forks from adding to a process > group. The forks stall while the tasklist_lock is held, but a fork > that began before we grabbed the tasklist_lock simply completes > afterwards, and the child does not receive the signal. This also means that SIGSTOP or sig_kernel_coredump() signal can't be delivered to pgrp/session reliably. With this patch copy_process() returns -ERESTARTNOINTR when it detects a pending signal, fork() will be restarted transparently after handling the signals. This patch also deletes now unneeded "group_stop_count > 0" check, copy_process() can no longer succeed while group stop in progress. Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Acked-By: Eric Biederman <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/exit.c')
0 files changed, 0 insertions, 0 deletions