diff options
author | Sakari Ailus <sakari.ailus@nokia.com> | 2007-05-04 11:19:59 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2007-05-09 09:12:56 -0400 |
commit | 36a63ee34b568de8d0762f9b07f34ae5caae7724 (patch) | |
tree | 0ad63f1e92b05f5505e90271f784b1d63a641911 /drivers/media | |
parent | 5ad5e4845b441a00e4165e2c2e3ac8507db9cbe6 (diff) |
V4L/DVB (5603): V4L: Prevent queueing queued buffers.
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>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/video/video-buf.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/drivers/media/video/video-buf.c b/drivers/media/video/video-buf.c index 459786ff459a..a32dfbe0585a 100644 --- a/drivers/media/video/video-buf.c +++ b/drivers/media/video/video-buf.c | |||
@@ -702,9 +702,7 @@ videobuf_qbuf(struct videobuf_queue *q, | |||
702 | dprintk(1,"qbuf: memory type is wrong.\n"); | 702 | dprintk(1,"qbuf: memory type is wrong.\n"); |
703 | goto done; | 703 | goto done; |
704 | } | 704 | } |
705 | if (buf->state == STATE_QUEUED || | 705 | if (buf->state != STATE_NEEDS_INIT && buf->state != STATE_IDLE) { |
706 | buf->state == STATE_PREPARED || | ||
707 | buf->state == STATE_ACTIVE) { | ||
708 | dprintk(1,"qbuf: buffer is already queued or active.\n"); | 706 | dprintk(1,"qbuf: buffer is already queued or active.\n"); |
709 | goto done; | 707 | goto done; |
710 | } | 708 | } |