Messages in this thread Patch in this message | | | Date | Fri, 1 Apr 2011 20:12:16 +0200 | From | Oleg Nesterov <> | Subject | [PATCH 2/4] 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> ---
kernel/signal.c | 2 -- 1 file changed, 2 deletions(-)
--- ptrace/kernel/signal.c~2_dss_kill_tcgsp 2011-04-01 17:12:07.000000000 +0200 +++ ptrace/kernel/signal.c 2011-04-01 18:10:18.000000000 +0200 @@ -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); } } }
| |