[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>
This commit is contained in:
committed by
Linus Torvalds
parent
b20fd6508c
commit
aa55a08687
@@ -110,11 +110,11 @@ extern unsigned long nr_iowait(void);
|
|||||||
#define TASK_RUNNING 0
|
#define TASK_RUNNING 0
|
||||||
#define TASK_INTERRUPTIBLE 1
|
#define TASK_INTERRUPTIBLE 1
|
||||||
#define TASK_UNINTERRUPTIBLE 2
|
#define TASK_UNINTERRUPTIBLE 2
|
||||||
#define TASK_STOPPED 4
|
#define TASK_NONINTERACTIVE 4
|
||||||
#define TASK_TRACED 8
|
#define TASK_STOPPED 8
|
||||||
#define EXIT_ZOMBIE 16
|
#define TASK_TRACED 16
|
||||||
#define EXIT_DEAD 32
|
#define EXIT_ZOMBIE 32
|
||||||
#define TASK_NONINTERACTIVE 64
|
#define EXIT_DEAD 64
|
||||||
|
|
||||||
#define __set_task_state(tsk, state_value) \
|
#define __set_task_state(tsk, state_value) \
|
||||||
do { (tsk)->state = (state_value); } while (0)
|
do { (tsk)->state = (state_value); } while (0)
|
||||||
|
|||||||
Reference in New Issue
Block a user