Messages in this thread |  | | | Date | Mon, 26 Dec 2011 18:11:51 +0100 | | From | Oleg Nesterov <> | | Subject | Re: [BUG] TASK_DEAD task is able to be woken up in special condition |
| |
On 12/26, Yasunori Goto wrote: > > > > > IIRC, this was already discussed a bit. Say, try_to_wake_up(TASK_INTERRUPTIBLE) > > can wakeup a TASK_UNINTERRUPTIBLE task if it temporary sets INTERRUPTIBLE but > > doesn't call schedule() in this state. > > Oleg-san, > > Could you point the discussion? > I don't understand yet how it occurred...
Suppose that the task T does
set_current_state(TASK_INTERRUPTIBLE);
set_current_state(TASK_UNINTERRUPTIBLE); schedule();
try_to_wake_up(TASK_UNINTERRUPTIBLE) in between can observe this task in TASK_INTERRUPTIBLE state. Then it can set RUNNING/WAKING after T sets ->state = TASK_UNINTERRUPTIBLE.
For example, this is possibly if T simply does wait_event() twice when the the 1st wait_event() doesn't sleep.
Basically this is the same race you described, but I think you found the case when we can't tolerate the spurious wakeup.
Oleg.
|  |