25-akpm/drivers/media/video/video-buf.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) diff -puN drivers/media/video/video-buf.c~videobuf_waiton-race-fix drivers/media/video/video-buf.c --- 25/drivers/media/video/video-buf.c~videobuf_waiton-race-fix Mon Oct 20 13:04:00 2003 +++ 25-akpm/drivers/media/video/video-buf.c Mon Oct 20 16:06:11 2003 @@ -320,14 +320,16 @@ int videobuf_waiton(struct videobuf_buff DECLARE_WAITQUEUE(wait, current); add_wait_queue(&vb->done, &wait); - while (vb->state == STATE_ACTIVE || - vb->state == STATE_QUEUED) { + while (vb->state == STATE_ACTIVE || vb->state == STATE_QUEUED) { if (non_blocking) { retval = -EAGAIN; break; } - current->state = intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE; - schedule(); + set_current_state(intr ? TASK_INTERRUPTIBLE : + TASK_UNINTERRUPTIBLE); + if (vb->state == STATE_ACTIVE || vb->state == STATE_QUEUED) + schedule(); + set_current_state(TASK_RUNNING); if (intr && signal_pending(current)) { dprintk(1,"buffer waiton: -EINTR\n"); retval = -EINTR; _