diff options
Diffstat (limited to 'kernel/exit.c')
| -rw-r--r-- | kernel/exit.c | 9 | 
1 files changed, 8 insertions, 1 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index d0b7d988f87..e6e01b959a0 100644 --- a/kernel/exit.c +++ b/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) {  | 
