summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline_handler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera/pipeline_handler.cpp')
-rw-r--r--src/libcamera/pipeline_handler.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index f69c4f03..3d61311c 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -62,7 +62,7 @@ LOG_DEFINE_CATEGORY(Pipeline)
* respective factories.
*/
PipelineHandler::PipelineHandler(CameraManager *manager)
- : manager_(manager)
+ : manager_(manager), lockOwner_(false)
{
}
@@ -150,6 +150,10 @@ MediaDevice *PipelineHandler::acquireMediaDevice(DeviceEnumerator *enumerator,
*/
bool PipelineHandler::lock()
{
+ /* Do not allow nested locking in the same libcamera instance. */
+ if (lockOwner_)
+ return false;
+
for (std::shared_ptr<MediaDevice> &media : mediaDevices_) {
if (!media->lock()) {
unlock();
@@ -157,6 +161,8 @@ bool PipelineHandler::lock()
}
}
+ lockOwner_ = true;
+
return true;
}
@@ -172,8 +178,13 @@ bool PipelineHandler::lock()
*/
void PipelineHandler::unlock()
{
+ if (lockOwner_)
+ return;
+
for (std::shared_ptr<MediaDevice> &media : mediaDevices_)
media->unlock();
+
+ lockOwner_ = false;
}
/**