patch-2.2.19 linux/kernel/exit.c
Next file: linux/kernel/fork.c
Previous file: linux/kernel/context.c
Back to the patch index
Back to the overall index
- Lines: 25
- Date:
Sun Mar 25 11:37:40 2001
- Orig file:
v2.2.18/kernel/exit.c
- Orig date:
Sun Mar 25 11:12:36 2001
diff -u --new-file --recursive --exclude-from /usr/src/exclude v2.2.18/kernel/exit.c linux/kernel/exit.c
@@ -437,7 +437,7 @@
struct wait_queue wait = { current, NULL };
struct task_struct *p;
- if (options & ~(WNOHANG|WUNTRACED|__WCLONE))
+ if (options & ~(WNOHANG|WUNTRACED|__WCLONE|__WALL))
return -EINVAL;
add_wait_queue(¤t->wait_chldexit,&wait);
@@ -462,8 +462,13 @@
if (p->pgrp != -pid)
continue;
}
- /* wait for cloned processes iff the __WCLONE flag is set */
- if ((p->exit_signal != SIGCHLD) ^ ((options & __WCLONE) != 0))
+ /* Wait for all children (clone and not) if __WALL is set;
+ * otherwise, wait for clone children *only* if __WCLONE is
+ * set; otherwise, wait for non-clone children *only*. (Note:
+ * A "clone" child here is one that reports to its parent
+ * using a signal other than SIGCHLD.) */
+ if (((p->exit_signal != SIGCHLD) ^ ((options & __WCLONE) != 0))
+ && !(options & __WALL))
continue;
flag = 1;
switch (p->state) {
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)