mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	[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:
		
							parent
							
								
									b20fd6508c
								
							
						
					
					
						commit
						aa55a08687
					
				
					 1 changed files with 5 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -110,11 +110,11 @@ extern unsigned long nr_iowait(void);
 | 
			
		|||
#define TASK_RUNNING		0
 | 
			
		||||
#define TASK_INTERRUPTIBLE	1
 | 
			
		||||
#define TASK_UNINTERRUPTIBLE	2
 | 
			
		||||
#define TASK_STOPPED		4
 | 
			
		||||
#define TASK_TRACED		8
 | 
			
		||||
#define EXIT_ZOMBIE		16
 | 
			
		||||
#define EXIT_DEAD		32
 | 
			
		||||
#define TASK_NONINTERACTIVE	64
 | 
			
		||||
#define TASK_NONINTERACTIVE	4
 | 
			
		||||
#define TASK_STOPPED		8
 | 
			
		||||
#define TASK_TRACED		16
 | 
			
		||||
#define EXIT_ZOMBIE		32
 | 
			
		||||
#define EXIT_DEAD		64
 | 
			
		||||
 | 
			
		||||
#define __set_task_state(tsk, state_value)		\
 | 
			
		||||
	do { (tsk)->state = (state_value); } while (0)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue