[libcamera-devel] [PATCH v3 06/11] libcamera: camera: Validate requests are completed in Running state
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Mar 26 03:10:42 CET 2021
Hi Kieran,
Thank you for the patch.
On Thu, Mar 25, 2021 at 01:42:26PM +0000, Kieran Bingham wrote:
> All requests must have completed before the Camera has fully stopped.
>
> Requests completing when the camera is not running represent an internal
> pipeline handler bug.
>
> Trap this event with a fatal error.
>
> Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
> src/libcamera/camera.cpp | 11 +++++++++--
> 1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
> index 84edbb8f494d..b86bff4745b2 100644
> --- a/src/libcamera/camera.cpp
> +++ b/src/libcamera/camera.cpp
> @@ -1062,11 +1062,11 @@ int Camera::stop()
>
> LOG(Camera, Debug) << "Stopping capture";
>
> - d->setState(Private::CameraConfigured);
> -
> d->pipe_->invokeMethod(&PipelineHandler::stop, ConnectionTypeBlocking,
> this);
>
> + d->setState(Private::CameraConfigured);
> +
> return 0;
> }
>
> @@ -1079,6 +1079,13 @@ int Camera::stop()
> */
> void Camera::requestComplete(Request *request)
> {
> + Private *const d = LIBCAMERA_D_PTR();
> +
> + /* Disconnected cameras are still able to complete requests. */
> + int ret = d->isAccessAllowed(Private::CameraRunning);
> + if (ret < 0 && ret != -ENODEV)
Would this work too ?
if (d->isAccessAllowed(Private::CameraRunning, true) < 0)
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> + LOG(Camera, Fatal) << "Trying to complete a request when stopped";
> +
> requestCompleted.emit(request);
> }
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list