V4L/DVB (9930): em28xx: Fix bad locks on error condition
authorMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 22 Dec 2008 09:14:31 +0000 (06:14 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 30 Dec 2008 11:39:21 +0000 (09:39 -0200)
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/em28xx/em28xx-video.c

index dbae8bc..fc41eea 100644 (file)
@@ -819,8 +819,10 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
        vidioc_try_fmt_vid_cap(file, priv, f);
 
        fmt = format_by_fourcc(f->fmt.pix.pixelformat);
-       if (!fmt)
-               return -EINVAL;
+       if (!fmt) {
+               rc = -EINVAL;
+               goto out;
+       }
 
        if (videobuf_queue_is_busy(&fh->vb_vidq)) {
                em28xx_errdev("%s queue busy\n", __func__);
@@ -1305,10 +1307,8 @@ static int vidioc_streamon(struct file *file, void *priv,
        mutex_lock(&dev->lock);
        rc = res_get(fh);
 
-       if (unlikely(rc < 0))
-               return rc;
-
-       rc = videobuf_streamon(&fh->vb_vidq);
+       if (likely(rc >= 0))
+               rc = videobuf_streamon(&fh->vb_vidq);
 
        mutex_unlock(&dev->lock);