summaryrefslogtreecommitdiffstats
path: root/drivers/media/video/saa7134/saa7134-video.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-18 15:49:47 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-18 15:49:47 -0800
commit20ef0f1ad0035cd7acc6cbcbc018b2dcd891e274 (patch)
treef98facca9df16f65590140f6b56c767bb8b6954c /drivers/media/video/saa7134/saa7134-video.c
parent9960c90c0cb9652f69ce794c7bf99bb3acf23552 (diff)
parent6165894fb6293072848e5699f3fcbe88b7c60815 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb
* git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb: (59 commits) V4L/DVB (7219): zoran: Fix namespace conflicts with Zoran 'GPIO_MAX' enum V4L/DVB (7205): tuner-xc2028 depends on FW_LOADER V4L/DVB (7201): cx88-mpeg: Fix race condition in variable access V4L/DVB (7200): Fix FM firmware loading V4L/DVB (7198): V4L, include ioctl.h in videodev headers V4L/DVB (7197): bttv: Fix overlay divide error V4L/DVB (7195): xc5000: fix build error when built as module V4L/DVB (7194): cx88-mpeg: Allow concurrent access to cx88-mpeg devices V4L/DVB (7193): tveeprom: Add proper tuner mapping for hauppauge eeprom id 133 V4L/DVB (7192): Adds support for Genius TVGo A11MCE V4L/DVB (7189): autosuspend support V4L/DVB (7188): radio-si470x version 1.0.6 V4L/DVB (7186): tda10086: make the 22kHz tone for DISEQC a config option V4L/DVB (7183): radio-si470x: fix build warning V4L/DVB (7180): em28xx: add URB_NO_TRANSFER_DMA_MAP, since urb->transfer_dma is set V4L/DVB (7179): Allow more than one em28xx board V4L/DVB (7164): em28xx-alsa: Add a missing mutex V4L/DVB (7163): em28xx: makes audio settings more stable V4L/DVB (7162): em28xx: Fix endian and returns the correct values V4L/DVB (7161): em28xx: Fix printing debug values higher than 127 ...
Diffstat (limited to 'drivers/media/video/saa7134/saa7134-video.c')
-rw-r--r--drivers/media/video/saa7134/saa7134-video.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/media/video/saa7134/saa7134-video.c b/drivers/media/video/saa7134/saa7134-video.c
index 1184d359e84..39c41ad97d0 100644
--- a/drivers/media/video/saa7134/saa7134-video.c
+++ b/drivers/media/video/saa7134/saa7134-video.c
@@ -1414,21 +1414,17 @@ video_poll(struct file *file, struct poll_table_struct *wait)
if (!list_empty(&fh->cap.stream))
buf = list_entry(fh->cap.stream.next, struct videobuf_buffer, stream);
} else {
- mutex_lock(&fh->cap.lock);
+ mutex_lock(&fh->cap.vb_lock);
if (UNSET == fh->cap.read_off) {
/* need to capture a new frame */
- if (res_locked(fh->dev,RESOURCE_VIDEO)) {
- mutex_unlock(&fh->cap.lock);
- return POLLERR;
- }
- if (0 != fh->cap.ops->buf_prepare(&fh->cap,fh->cap.read_buf,fh->cap.field)) {
- mutex_unlock(&fh->cap.lock);
- return POLLERR;
- }
+ if (res_locked(fh->dev,RESOURCE_VIDEO))
+ goto err;
+ if (0 != fh->cap.ops->buf_prepare(&fh->cap,fh->cap.read_buf,fh->cap.field))
+ goto err;
fh->cap.ops->buf_queue(&fh->cap,fh->cap.read_buf);
fh->cap.read_off = 0;
}
- mutex_unlock(&fh->cap.lock);
+ mutex_unlock(&fh->cap.vb_lock);
buf = fh->cap.read_buf;
}
@@ -1440,6 +1436,10 @@ video_poll(struct file *file, struct poll_table_struct *wait)
buf->state == VIDEOBUF_ERROR)
return POLLIN|POLLRDNORM;
return 0;
+
+err:
+ mutex_unlock(&fh->cap.vb_lock);
+ return POLLERR;
}
static int video_release(struct inode *inode, struct file *file)