Messages in this thread Patch in this message | | | Date | Sun, 15 Sep 2002 09:39:26 +0200 (CEST) | From | Ingo Molnar <> | Subject | [patch] wait4-fix-2.5.34-A0, BK-curr |
| |
the attached patch (against BK-curr) fixes a sys_wait4() bug noticed by Ulrich Drepper. The kernel would not block properly if there are eligible children delayed due to the new delayed thread-group-leader logic. The solution is to introduce a new type of 'eligible child' type - and skip over delayed children but set the wait4 flag nevertheless.
The libpthreads testcase that failed due to it now it works fine.
Ingo
--- linux/kernel/exit.c.orig Sun Sep 15 09:29:51 2002 +++ linux/kernel/exit.c Sun Sep 15 09:26:42 2002 @@ -731,7 +731,7 @@ * in a non-empty thread group: */ if (current->tgid != p->tgid && delay_group_leader(p)) - return 0; + return 2; if (security_ops->task_wait(p)) return 0; @@ -757,11 +757,21 @@ do { struct task_struct *p; struct list_head *_p; + int ret; + list_for_each(_p,&tsk->children) { p = list_entry(_p,struct task_struct,sibling); - if (!eligible_child(pid, options, p)) + + ret = eligible_child(pid, options, p); + if (!ret) continue; flag = 1; + /* + * Eligible but we cannot release it yet: + */ + if (ret == 2) + continue; + switch (p->state) { case TASK_STOPPED: if (!p->exit_code) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |