double unlock in bttv_poll() and in saa7134-video.c
Commit Message
On Sat, 25 Jul 2009, Dan Carpenter wrote:
> My source code checker, smatch (http://repo.or.cz/w/smatch.git),
> complains about a double unlock in bttv_poll() from
> drivers/media/video/bt8xx/bttv-driver.c. It unlocks on line 3190 and
> again on 3201.
How about this:
http://linuxtv.org/hg/~tap/bttv?cmd=changeset;node=35ddb77b68f8
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
@@ -3191,15 +3191,14 @@ static unsigned int bttv_poll(struct fil
return videobuf_poll_stream(file, &fh->vbi, wait);
}
+ mutex_lock(&fh->cap.vb_lock);
if (check_btres(fh,RESOURCE_VIDEO_STREAM)) {
- mutex_lock(&fh->cap.vb_lock);
/* streaming capture */
if (list_empty(&fh->cap.stream))
goto err;
buf = list_entry(fh->cap.stream.next,struct bttv_buffer,vb.stream);
} else {
/* read() capture */
- mutex_lock(&fh->cap.vb_lock);
if (NULL == fh->cap.read_buf) {
/* need to capture a new frame */
if (locked_btres(fh->btv,RESOURCE_VIDEO_STREAM))
@@ -3217,7 +3216,6 @@ static unsigned int bttv_poll(struct fil
fh->cap.ops->buf_queue(&fh->cap,fh->cap.read_buf);
fh->cap.read_off = 0;
}
- mutex_unlock(&fh->cap.vb_lock);
buf = (struct bttv_buffer*)fh->cap.read_buf;
}