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);