From: Roland McGrath Date: Thu, 29 Sep 2005 21:54:42 +0000 (-0700) Subject: [PATCH] Fix task state testing properly in do_signal_stop() X-Git-Tag: v2.6.14-rc3~48 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=5acbc5cb507e6c381b70093b1081854708e82b16;p=linux-2.6-omap-h63xx.git [PATCH] Fix task state testing properly in do_signal_stop() Any tests using < TASK_STOPPED or the like are left over from the time when the TASK_ZOMBIE and TASK_DEAD bits were in the same word, and it served to check for "stopped or dead". I think this one in do_signal_stop is the only such case. It has been buggy ever since exit_state was separated, and isn't testing the exit_state value. Signed-off-by: Roland McGrath Signed-off-by: Linus Torvalds --- diff --git a/kernel/signal.c b/kernel/signal.c index 5a274705ba1..619b027e92b 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -1763,7 +1763,8 @@ do_signal_stop(int signr) * stop is always done with the siglock held, * so this check has no races. */ - if (t->state < TASK_STOPPED) { + if (!t->exit_state && + !(t->state & (TASK_STOPPED|TASK_TRACED))) { stop_count++; signal_wake_up(t, 0); }