Messages in this thread | | | Date | Mon, 29 Jan 2001 20:47:50 +0100 (MET) | From | Roman Zippel <> |
| |
Hi,
On Mon, 29 Jan 2001, Andi Kleen wrote:
> You can miss wakeups. The standard pattern is: > > get locks > > add_wait_queue(&waitqueue, &wait); > for (;;) { > if (condition you're waiting for is true) > break; > unlock any non sleeping locks you need for condition > __set_task_state(current, TASK_UNINTERRUPTIBLE); > schedule(); > __set_task_state(current, TASK_RUNNING); > reaquire locks > } > remove_wait_queue(&waitqueue, &wait);
You still miss wakeups. :) Always set the task state first, then check the condition. See the wait_event*() macros you mentioned for the right order.
bye, Roman
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
| |