diff options
author | Oleg Nesterov <oleg@redhat.com> | 2011-04-01 20:12:16 +0200 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2011-04-04 02:11:04 +0200 |
commit | 780006eac2fe7f4d2582da16a096e5a44c4767ff (patch) | |
tree | 13d315029abead58b8b88071c7177271824b211a /kernel/signal.c | |
parent | 1deac632fc3dcff33a6df3e82ef10c738ac13fe6 (diff) | |
download | lwn-780006eac2fe7f4d2582da16a096e5a44c4767ff.tar.gz lwn-780006eac2fe7f4d2582da16a096e5a44c4767ff.zip |
signal: do_signal_stop: Remove the unneeded task_clear_group_stop_pending()
PF_EXITING or TASK_STOPPED has already called task_participate_group_stop()
and cleared its ->group_stop. No need to do task_clear_group_stop_pending()
when we start the new group stop.
Add a small comment to explain the !task_is_stopped() check. Note that this
check is not exactly right and it can lead to unnecessary stop later if the
thread is TASK_PTRACED. What we need is task_participated_in_group_stop(),
this will be solved later.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index 38ea9e2f1831..e9abc69dc0d8 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -1866,7 +1866,8 @@ static int do_signal_stop(int signr) * still in effect and then receive a stop signal and * initiate another group stop. This deviates from the * usual behavior as two consecutive stop signals can't - * cause two group stops when !ptraced. + * cause two group stops when !ptraced. That is why we + * also check !task_is_stopped(t) below. * * The condition can be distinguished by testing whether * SIGNAL_STOP_STOPPED is already set. Don't generate @@ -1896,8 +1897,6 @@ static int do_signal_stop(int signr) t->group_stop |= signr | gstop; sig->group_stop_count++; signal_wake_up(t, 0); - } else { - task_clear_group_stop_pending(t); } } } |