Макрос wait_event_interruptible()
ожидает, что текущее состояние задачи равно TASK_RUNNING
, и состояние задачи изменяется на TASK_RUNNING
, когда выполнение возвращается к вызывающей стороне. Поэтому предыдущий вызов set_current_state(TASK_INTERRUPTIBLE);
и последующий вызов __set_current_state(TASK_RUNNING);
должны быть удалены.
Во время выполнения макроса wait_event_interruptible()
переданный condition
будет оцениваться один или несколько раз, первоначально в *Состояние 1010 *, а затем при пробуждении в состоянии TASK_INTERRUPTIBLE
.
Макрос wait_event_interrubtible()
возвращает -ERESTARTSYS
, если прерван сигналом до condition
, или возвращает 0 при condition
оценивается как истина.