[libcamera-devel] [PATCH] libcamera: v4l2_videodevice: Guard against releasing unallocated buffers
Kieran Bingham
kieran.bingham at ideasonboard.com
Fri Oct 28 15:42:13 CEST 2022
Quoting Naushir Patuck via libcamera-devel (2022-10-28 14:38:47)
> releaseBuffers() unconditionally calls ioctl(REQBUFS, 0) to release device
> buffer allocations through the close() and class destructor functions. If
> another libcamera process is running concurrently with a different sensor, it
> would cause the ioctl to fail in the kernel because the buffer queue is owned
> owned by the other process. This in turn would cause libcamera to generate an
> error log message.
>
> Fix this by ensuring the releaseBuffers() only calls ioctl(REQBUFS, 0) if there
> have been buffers previously allocated by the device. This is done by testing
> the presense of the V4L2BufferCache in the object.
>
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> ---
> src/libcamera/v4l2_videodevice.cpp | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
> index e30858c9fa02..0d60dbd1c23d 100644
> --- a/src/libcamera/v4l2_videodevice.cpp
> +++ b/src/libcamera/v4l2_videodevice.cpp
> @@ -1533,6 +1533,9 @@ int V4L2VideoDevice::importBuffers(unsigned int count)
> */
> int V4L2VideoDevice::releaseBuffers()
> {
> + if (!cache_)
> + return 0;
Return 0 looks like it will keep the compiler happier than return;
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> +
> LOG(V4L2, Debug) << "Releasing buffers";
>
> delete cache_;
> --
> 2.25.1
>
More information about the libcamera-devel
mailing list