[libcamera-devel] [PATCH] libcamera: v4l2_videodevice: Guard against releasing unallocated buffers

David Plowman david.plowman at raspberrypi.com
Fri Oct 28 15:40:37 CEST 2022


Hi Naush

Thanks for the update!

On Fri, 28 Oct 2022 at 14:38, Naushir Patuck via libcamera-devel
<libcamera-devel at lists.libcamera.org> wrote:
>
> 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>

Tested-by: David Plowman <david.plowman at raspberrypi.com>

Thanks!
David

> ---
>  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;
> +
>         LOG(V4L2, Debug) << "Releasing buffers";
>
>         delete cache_;
> --
> 2.25.1
>


More information about the libcamera-devel mailing list