From 0488aae48133be433bf5cc91dc03e08732d6d12b Mon Sep 17 00:00:00 2001 From: Oleg Nesterov Date: Thu, 2 Apr 2009 16:58:11 -0700 Subject: [PATCH] --- yaml --- r: 139687 b: refs/heads/master c: 95c3eb76dc07fd81289888ffc42948196b34b444 h: refs/heads/master i: 139685: de14485b8a93eb6b0732f03802c0935b29add7aa 139683: 3c8813d04d63a7c72c8df872f996dcfafedb647d 139679: f03449f8829a218e9518fb455d0e5305aa1784a5 v: v3 --- [refs] | 2 +- trunk/kernel/ptrace.c | 22 +++++++++------------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/[refs] b/[refs] index ec92f6a61443..dace78aa4ec5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6588c1e3ff01418acafd938db0740e3477dc8cb7 +refs/heads/master: 95c3eb76dc07fd81289888ffc42948196b34b444 diff --git a/trunk/kernel/ptrace.c b/trunk/kernel/ptrace.c index c9cf48b21f05..f62a568e84ec 100644 --- a/trunk/kernel/ptrace.c +++ b/trunk/kernel/ptrace.c @@ -235,16 +235,6 @@ int ptrace_attach(struct task_struct *task) return retval; } -static inline void __ptrace_detach(struct task_struct *child, unsigned int data) -{ - child->exit_code = data; - /* .. re-parent .. */ - __ptrace_unlink(child); - /* .. and wake it up. */ - if (child->exit_state != EXIT_ZOMBIE) - wake_up_process(child); -} - int ptrace_detach(struct task_struct *child, unsigned int data) { if (!valid_signal(data)) @@ -254,10 +244,16 @@ int ptrace_detach(struct task_struct *child, unsigned int data) ptrace_disable(child); clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); - write_lock_irq(&tasklist_lock); /* protect against de_thread()->release_task() */ - if (child->ptrace) - __ptrace_detach(child, data); + write_lock_irq(&tasklist_lock); + if (child->ptrace) { + child->exit_code = data; + + __ptrace_unlink(child); + + if (!child->exit_state) + wake_up_process(child); + } write_unlock_irq(&tasklist_lock); return 0;