diff options
author | Brandon Philips <bphilips@suse.de> | 2007-09-27 19:55:28 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2007-10-09 23:03:05 -0400 |
commit | 00f98d0804c88c29bef81cb98c861f13c9b33f30 (patch) | |
tree | 0ca7f4b912e31f49fe342a29558d14b8cf2d395c /drivers/media | |
parent | ba32bd95d431525ad2ffac97cadf9ee40b63939e (diff) |
V4L/DVB (6276): V4L: videobuf-core.c lock before streaming check
The reading/streaming fields are used for mutual exclusion of the queue and
should be protected by the queue lock.
Signed-off-by: Brandon Philips <bphilips@suse.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
http://thread.gmane.org/gmane.comp.video.video4linux/34978/focus=34981
Reviewed-by: Ricardo Cerqueira <v4l@cerqueira.org>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/video/videobuf-core.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/media/video/videobuf-core.c b/drivers/media/video/videobuf-core.c index a27e114cacef..ca67f80184bd 100644 --- a/drivers/media/video/videobuf-core.c +++ b/drivers/media/video/videobuf-core.c | |||
@@ -289,16 +289,18 @@ int videobuf_reqbufs(struct videobuf_queue *q, | |||
289 | return -EINVAL; | 289 | return -EINVAL; |
290 | } | 290 | } |
291 | 291 | ||
292 | mutex_lock(&q->lock); | ||
292 | if (q->streaming) { | 293 | if (q->streaming) { |
293 | dprintk(1,"reqbufs: streaming already exists\n"); | 294 | dprintk(1,"reqbufs: streaming already exists\n"); |
294 | return -EBUSY; | 295 | retval = -EBUSY; |
296 | goto done; | ||
295 | } | 297 | } |
296 | if (!list_empty(&q->stream)) { | 298 | if (!list_empty(&q->stream)) { |
297 | dprintk(1,"reqbufs: stream running\n"); | 299 | dprintk(1,"reqbufs: stream running\n"); |
298 | return -EBUSY; | 300 | retval = -EBUSY; |
301 | goto done; | ||
299 | } | 302 | } |
300 | 303 | ||
301 | mutex_lock(&q->lock); | ||
302 | count = req->count; | 304 | count = req->count; |
303 | if (count > VIDEO_MAX_FRAME) | 305 | if (count > VIDEO_MAX_FRAME) |
304 | count = VIDEO_MAX_FRAME; | 306 | count = VIDEO_MAX_FRAME; |