[PATCH 1/5] pipeline_handler: Fix unlocking media devices too early when there are multiple cameras

Hans de Goede hdegoede at redhat.com
Tue Aug 20 21:50:12 CEST 2024


PipelineHandler::acquire() only locks the media devices when the first
camera is acquired. If a second camera of a pipeline is acquired only
useCount_ is increased and nothing else is done.

When releasing cameras PipelineHandler::release() should only unlock
the media devices when the last camera is released. But the old code
unlocked on every release().

Fix PipelineHandler::release() to only release the media devices when
the last camera is released.

Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
 src/libcamera/pipeline_handler.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 5a6de685..a20cd27d 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -205,7 +205,8 @@ void PipelineHandler::release(Camera *camera)
 
 	ASSERT(useCount_);
 
-	unlockMediaDevices();
+	if (useCount_ == 1)
+		unlockMediaDevices();
 
 	releaseDevice(camera);
 
-- 
2.46.0



More information about the libcamera-devel mailing list