[media] uvcvideo: Don't stop the stream twice at file handle release
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Tue, 21 Oct 2014 19:07:15 +0000 (16:07 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 25 Nov 2014 10:40:37 +0000 (08:40 -0200)
When releasing the file handle the driver calls the vb2_queue_release
which turns the stream off. There's thus no need to turn the stream off
explicitly beforehand.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/usb/uvc/uvc_queue.c
drivers/media/usb/uvc/uvc_v4l2.c
drivers/media/usb/uvc/uvcvideo.h

index 758247048ee1a7a2e17ab64ce847fd9e4f7d9c50..708478f958e98e05dc37d2cae8cf27118385505f 100644 (file)
@@ -194,6 +194,13 @@ int uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type,
        return 0;
 }
 
+void uvc_queue_release(struct uvc_video_queue *queue)
+{
+       mutex_lock(&queue->mutex);
+       vb2_queue_release(&queue->queue);
+       mutex_unlock(&queue->mutex);
+}
+
 /* -----------------------------------------------------------------------------
  * V4L2 queue operations
  */
@@ -210,13 +217,6 @@ int uvc_alloc_buffers(struct uvc_video_queue *queue,
        return ret ? ret : rb->count;
 }
 
-void uvc_free_buffers(struct uvc_video_queue *queue)
-{
-       mutex_lock(&queue->mutex);
-       vb2_queue_release(&queue->queue);
-       mutex_unlock(&queue->mutex);
-}
-
 int uvc_query_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf)
 {
        int ret;
index 4619fd6b0494c51dab4ae323bdcafc3171ba12de..1b6b6db30d98693ffa5f8a42ee789bacfa524926 100644 (file)
@@ -530,10 +530,8 @@ static int uvc_v4l2_release(struct file *file)
        uvc_trace(UVC_TRACE_CALLS, "uvc_v4l2_release\n");
 
        /* Only free resources if this is a privileged handle. */
-       if (uvc_has_privileges(handle)) {
-               uvc_queue_enable(&stream->queue, 0);
-               uvc_free_buffers(&stream->queue);
-       }
+       if (uvc_has_privileges(handle))
+               uvc_queue_release(&stream->queue);
 
        /* Release the file handle. */
        uvc_dismiss_privileges(handle);
index 53db7ed1e472832beac1bf926e9ae6c5a821b1d1..344aedec9dfb7acef1ffd6ad2d8d6e5e743ce323 100644 (file)
@@ -623,9 +623,9 @@ extern struct uvc_entity *uvc_entity_by_id(struct uvc_device *dev, int id);
 /* Video buffers queue management. */
 extern int uvc_queue_init(struct uvc_video_queue *queue,
                enum v4l2_buf_type type, int drop_corrupted);
+extern void uvc_queue_release(struct uvc_video_queue *queue);
 extern int uvc_alloc_buffers(struct uvc_video_queue *queue,
                struct v4l2_requestbuffers *rb);
-extern void uvc_free_buffers(struct uvc_video_queue *queue);
 extern int uvc_query_buffer(struct uvc_video_queue *queue,
                struct v4l2_buffer *v4l2_buf);
 extern int uvc_create_buffers(struct uvc_video_queue *queue,