wait_task_zombie() && EXIT_DEAD problems
Oleg Nesterov
oleg at redhat.com
Tue Apr 21 22:06:21 UTC 2009
On 04/20, Roland McGrath wrote:
>
> > Then re-take tasklist for reading and continue the reaping.
>
> You don't need tasklist_lock again, assuming you did do_notify_parent()
> while holding it for write (as done now).
Yes, probably you are right.
> > Hmm... looking at the current code in wait_task_zombie() under
> > "if (traced)", shouldn't we check !same_thread_group(p->real_parent, current)
> > before do_notify_parent() ?
>
> It's impossible. ptrace_attach() doesn't allow it.
Yes, we can't trace the sub-thread. But ptrace_reparented() is true
when we trace the sub-thread's natural child.
IOW, 2 threads T1 and T2. T2 forks the child C. T1 ptraces C. C dies
and becomes EXIT_ZOMBIE. It sends the notification to thread-group.
Then, any thread does do_wait(). But since ptrace_reparented() = T
we don't release C but send the notification again. This doesn't
look right.
But the patch I sent was not right. I think we should do
- traced = ptrace_reparented(p);
+ traced = !same_thread_group(parent, real_parent);
Or, perhaps better, we should change ptrace_reparented().
Another caller is tracehook_notify_death(), perhaps "other than our
normal parent" should mean other process, not thread.
Oleg.
More information about the utrace-devel
mailing list