From a0a6193e25eef93e6c8fb34d10a343757a76c2ff Mon Sep 17 00:00:00 2001 From: Oleg Nesterov Date: Wed, 4 Jan 2012 17:29:02 +0100 Subject: [PATCH] --- yaml --- r: 277100 b: refs/heads/master c: 50b8d257486a45cba7b65ca978986ed216bbcc10 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/exit.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 718ebe26517c..41ecea3416d2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8d9cbf8240023f5b6d19f2106aff3d7077fc4a3b +refs/heads/master: 50b8d257486a45cba7b65ca978986ed216bbcc10 diff --git a/trunk/kernel/exit.c b/trunk/kernel/exit.c index d0b7d988f873..e6e01b959a0e 100644 --- a/trunk/kernel/exit.c +++ b/trunk/kernel/exit.c @@ -1540,8 +1540,15 @@ static int wait_consider_task(struct wait_opts *wo, int ptrace, } /* dead body doesn't have much to contribute */ - if (p->exit_state == EXIT_DEAD) + if (unlikely(p->exit_state == EXIT_DEAD)) { + /* + * But do not ignore this task until the tracer does + * wait_task_zombie()->do_notify_parent(). + */ + if (likely(!ptrace) && unlikely(ptrace_reparented(p))) + wo->notask_error = 0; return 0; + } /* slay zombie? */ if (p->exit_state == EXIT_ZOMBIE) {