[libcamera-devel] [PATCH v2 4/8] libcamera: camera: Validate requests are completed in Running state

Jacopo Mondi jacopo at jmondi.org
Sat Mar 13 10:35:49 CET 2021


Hi Kieran,

On Fri, Mar 12, 2021 at 05:47:23AM +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.
>

Am I wrong or this is actually the other way around ? Marking the
Camera as Configured -after- the pipeline's stop() has been invoked
makes sure the requests that complete with error due to stop() are
refused.

IOW stop() is invoked on the pipeline thread, which might complete
requests with error asynchronously from the camera state being
moved to 'CameraConfigured'. After the Camera state has changed,
all the requests completed with error will trigger a Fatal.
Am I missing something obvious ?

> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
>  src/libcamera/camera.cpp | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
> index 84edbb8f494d..19fb9eb415b0 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,12 @@ int Camera::stop()
>   */
>  void Camera::requestComplete(Request *request)
>  {
> +	Private *const d = LIBCAMERA_D_PTR();
> +
> +	int ret = d->isAccessAllowed(Private::CameraRunning);
> +	if (ret < 0)
> +		LOG(Camera, Fatal) << "Trying to complete a request when Stopped";
> +
>  	requestCompleted.emit(request);
>  }
>
> --
> 2.25.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel


More information about the libcamera-devel mailing list