[libcamera-devel] [PATCH v3 06/11] libcamera: camera: Validate requests are completed in Running state
Kieran Bingham
kieran.bingham at ideasonboard.com
Fri Mar 26 16:18:00 CET 2021
Hi Laurent,
On 26/03/2021 02:10, Laurent Pinchart wrote:
> 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)
>
Oh, I'd missed that there was an allowDisconnected parameter to
isAccessAllowed.
Yes, that's better.
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>
>> + LOG(Camera, Fatal) << "Trying to complete a request when stopped";
>> +
>> requestCompleted.emit(request);
>> }
>>
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list