From b528ddfe522564dace5e3856ff40c9756adc3016 Mon Sep 17 00:00:00 2001 From: Oleg Nesterov Date: Wed, 4 Jan 2012 17:29:20 +0100 Subject: [PATCH] --- yaml --- r: 277101 b: refs/heads/master c: 8a88951b5878dc475dcd841cefc767e36397d14e h: refs/heads/master i: 277099: 700fb6b61ebd8c47bb60ea0fe46e2527d59ac22f v: v3 --- [refs] | 2 +- trunk/kernel/ptrace.c | 13 ++++++++++++- trunk/kernel/signal.c | 2 -- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 41ecea3416d2..734729ae8296 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 50b8d257486a45cba7b65ca978986ed216bbcc10 +refs/heads/master: 8a88951b5878dc475dcd841cefc767e36397d14e diff --git a/trunk/kernel/ptrace.c b/trunk/kernel/ptrace.c index 24d04477b257..78ab24a7b0e4 100644 --- a/trunk/kernel/ptrace.c +++ b/trunk/kernel/ptrace.c @@ -96,9 +96,20 @@ void __ptrace_unlink(struct task_struct *child) */ if (!(child->flags & PF_EXITING) && (child->signal->flags & SIGNAL_STOP_STOPPED || - child->signal->group_stop_count)) + child->signal->group_stop_count)) { child->jobctl |= JOBCTL_STOP_PENDING; + /* + * This is only possible if this thread was cloned by the + * traced task running in the stopped group, set the signal + * for the future reports. + * FIXME: we should change ptrace_init_task() to handle this + * case. + */ + if (!(child->jobctl & JOBCTL_STOP_SIGMASK)) + child->jobctl |= SIGSTOP; + } + /* * If transition to TASK_STOPPED is pending or in TASK_TRACED, kick * @child in the butt. Note that @resume should be used iff @child diff --git a/trunk/kernel/signal.c b/trunk/kernel/signal.c index b3f78d09a105..206551563cce 100644 --- a/trunk/kernel/signal.c +++ b/trunk/kernel/signal.c @@ -1994,8 +1994,6 @@ static bool do_signal_stop(int signr) */ if (!(sig->flags & SIGNAL_STOP_STOPPED)) sig->group_exit_code = signr; - else - WARN_ON_ONCE(!current->ptrace); sig->group_stop_count = 0;