[PATCH] fix TASK_STOPPED vs TASK_NONINTERACTIVE interaction
authorOleg Nesterov <oleg@tv-sign.ru>
Thu, 29 Sep 2005 15:58:53 +0000 (19:58 +0400)
committerLinus Torvalds <torvalds@g5.osdl.org>
Thu, 29 Sep 2005 16:05:52 +0000 (09:05 -0700)
commitaa55a08687059aa169d10a313c41f238c2070488
tree9eaad6fc01e385778142b451a22bef99af9ecc68
parentb20fd6508c565df04a6b5816f17e03b04d4f924d
[PATCH] fix TASK_STOPPED vs TASK_NONINTERACTIVE interaction

do_signal_stop:

for_each_thread(t) {
if (t->state < TASK_STOPPED)
++sig->group_stop_count;
}

However, TASK_NONINTERACTIVE > TASK_STOPPED, so this loop will not
count TASK_INTERRUPTIBLE | TASK_NONINTERACTIVE threads.

See also wait_task_stopped(), which checks ->state > TASK_STOPPED.

Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
[ We really probably should always use the appropriate bitmasks to test
  task states, not do it like this. Using something like

#define TASK_RUNNABLE (TASK_RUNNING | TASK_INTERRUPTIBLE | \
TASK_UNINTERRUPTIBLE | TASK_NONINTERACTIVE)

  and then doing "if (task->state & TASK_RUNNABLE)" or similar. But the
  ordering of the task states is historical, and keeping the ordering
  does make sense regardless. ]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
include/linux/sched.h