[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