(textually depends on wait_task_zombie-remove-unneeded-child-signal-check.patch)
The "p->exit_signal == -1 && p->ptrace == 0" check and the comment are bogus.
We already did exactly the same check in eligible_child(), we did not drop
tasklist_lock since then, and both variables need write_lock(tasklist) to be
changed.
Signed-off-by: Oleg Nesterov <[email protected]>
--- t/kernel/exit.c~1_WTZ_NORACE 2007-08-17 17:31:59.000000000 +0400
+++ t/kernel/exit.c 2007-08-17 18:56:31.000000000 +0400
@@ -1210,13 +1210,6 @@ static int wait_task_zombie(struct task_
BUG_ON(state != EXIT_DEAD);
return 0;
}
- if (unlikely(p->exit_signal == -1 && p->ptrace == 0)) {
- /*
- * This can only happen in a race with a ptraced thread
- * dying on another processor.
- */
- return 0;
- }
/* traced means p->ptrace, but not vice versa */
traced = (p->real_parent != p->parent);
> (textually depends on wait_task_zombie-remove-unneeded-child-signal-check.patch)
>
> The "p->exit_signal == -1 && p->ptrace == 0" check and the comment are bogus.
> We already did exactly the same check in eligible_child(), we did not drop
> tasklist_lock since then, and both variables need write_lock(tasklist) to be
> changed.
I think this is correct. IIRC, when the check was added, ->ptrace could be
cleared some other way.
Thanks,
Roland