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

Kieran Bingham kieran.bingham at ideasonboard.com
Fri Mar 12 06:47:23 CET 2021


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.

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



More information about the libcamera-devel mailing list