From 88b964548d4f808a609c41baf868a7f2e6ab3635 Mon Sep 17 00:00:00 2001 From: Oleg Nesterov Date: Thu, 21 Jul 2011 20:00:43 +0200 Subject: [PATCH] --- yaml --- r: 256869 b: refs/heads/master c: eac1b5e57d7abc836e78fd3fbcf77dbeed01edc9 h: refs/heads/master i: 256867: 3a8e29bb6af895b764013a68ecac3457adf4e123 v: v3 --- [refs] | 2 +- trunk/fs/exec.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 39e397e6a9a1..fc954a7f8aea 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8a35241803eeb0e9fd3fe27835d6b2775c73b641 +refs/heads/master: eac1b5e57d7abc836e78fd3fbcf77dbeed01edc9 diff --git a/trunk/fs/exec.c b/trunk/fs/exec.c index b08367abf30e..d219541db06c 100644 --- a/trunk/fs/exec.c +++ b/trunk/fs/exec.c @@ -967,6 +967,14 @@ static int de_thread(struct task_struct *tsk) BUG_ON(leader->exit_state != EXIT_ZOMBIE); leader->exit_state = EXIT_DEAD; + + /* + * We are going to release_task()->ptrace_unlink() silently, + * the tracer can sleep in do_wait(). EXIT_DEAD guarantees + * the tracer wont't block again waiting for this thread. + */ + if (unlikely(leader->ptrace)) + __wake_up_parent(leader, leader->parent); write_unlock_irq(&tasklist_lock); release_task(leader);