[media] vivi: correctly cleanup after a start_streaming failure
authorHans Verkuil <hans.verkuil@cisco.com>
Fri, 21 Feb 2014 08:34:49 +0000 (05:34 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Tue, 11 Mar 2014 09:56:44 +0000 (06:56 -0300)
If start_streaming fails then any queued buffers must be given back
to the vb2 core.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/platform/vivi.c

index 776015bc187da9d0a99f80febb0cc706db9756ec..cfe7548c4493525bc49989733a400bf097ccabc2 100644 (file)
@@ -889,10 +889,20 @@ static void buffer_queue(struct vb2_buffer *vb)
 static int start_streaming(struct vb2_queue *vq, unsigned int count)
 {
        struct vivi_dev *dev = vb2_get_drv_priv(vq);
+       int err;
 
        dprintk(dev, 1, "%s\n", __func__);
        dev->seq_count = 0;
-       return vivi_start_generating(dev);
+       err = vivi_start_generating(dev);
+       if (err) {
+               struct vivi_buffer *buf, *tmp;
+
+               list_for_each_entry_safe(buf, tmp, &dev->vidq.active, list) {
+                       list_del(&buf->list);
+                       vb2_buffer_done(&buf->vb, VB2_BUF_STATE_QUEUED);
+               }
+       }
+       return err;
 }
 
 /* abort streaming and wait for last buffer */