V4L/DVB (5603): V4L: Prevent queueing queued buffers.
authorSakari Ailus <sakari.ailus@nokia.com>
Fri, 4 May 2007 15:19:59 +0000 (12:19 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Wed, 9 May 2007 13:12:56 +0000 (10:12 -0300)
videobuf_qbuf queues buffers to q->stream but does not properly check
the state of the buffer before queueing. It was possible to queue
buffers that already were in the queue.
Only buffers that are in states STATE_NEEDS_INIT and STATE_IDLE can be
queued.

Signed-off-by: Sakari Ailus <sakari.ailus@nokia.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/video-buf.c

index 459786ff459a97df7bd3c56e3140a29ac0282d96..a32dfbe0585af96de2c9acc126e5fd0e6fb1edd8 100644 (file)
@@ -702,9 +702,7 @@ videobuf_qbuf(struct videobuf_queue *q,
                dprintk(1,"qbuf: memory type is wrong.\n");
                goto done;
        }
-       if (buf->state == STATE_QUEUED ||
-           buf->state == STATE_PREPARED ||
-           buf->state == STATE_ACTIVE) {
+       if (buf->state != STATE_NEEDS_INIT && buf->state != STATE_IDLE) {
                dprintk(1,"qbuf: buffer is already queued or active.\n");
                goto done;
        }