[media] vb2: properly clean up PREPARED and QUEUED buffers
If __reqbufs was called then existing buffers are freed. However, if that happens without ever having started STREAMON, but if buffers have been queued, then the buf_finish op is never called. Add a call to __vb2_queue_cancel in __reqbufs so that these buffers are cleaned up there as well. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
b3379c6201
commit
fb64dca805
|
@ -100,6 +100,8 @@ module_param(debug, int, 0644);
|
|||
#define V4L2_BUFFER_OUT_FLAGS (V4L2_BUF_FLAG_PFRAME | V4L2_BUF_FLAG_BFRAME | \
|
||||
V4L2_BUF_FLAG_KEYFRAME | V4L2_BUF_FLAG_TIMECODE)
|
||||
|
||||
static void __vb2_queue_cancel(struct vb2_queue *q);
|
||||
|
||||
/**
|
||||
* __vb2_buf_mem_alloc() - allocate video memory for the given buffer
|
||||
*/
|
||||
|
@ -802,6 +804,12 @@ static int __reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req)
|
|||
return -EBUSY;
|
||||
}
|
||||
|
||||
/*
|
||||
* Call queue_cancel to clean up any buffers in the PREPARED or
|
||||
* QUEUED state which is possible if buffers were prepared or
|
||||
* queued without ever calling STREAMON.
|
||||
*/
|
||||
__vb2_queue_cancel(q);
|
||||
ret = __vb2_queue_free(q, q->num_buffers);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
Loading…
Reference in New Issue