[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