Message ID | 20221028133847.12944-1-naush@raspberrypi.com |
---|---|
State | Accepted |
Commit | a2bdff6d0b67475492ac7cf9318866b6d89a28fd |
Headers | show |
Series |
|
Related | show |
Hi Naush Thanks for the update! On Fri, 28 Oct 2022 at 14:38, Naushir Patuck via libcamera-devel <libcamera-devel@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@raspberrypi.com> Tested-by: David Plowman <david.plowman@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 >
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@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@ideasonboard.com> > + > LOG(V4L2, Debug) << "Releasing buffers"; > > delete cache_; > -- > 2.25.1 >
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_;
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@raspberrypi.com> --- src/libcamera/v4l2_videodevice.cpp | 3 +++ 1 file changed, 3 insertions(+)