diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libcamera/media_device.cpp | 14 | ||||
-rw-r--r-- | src/libcamera/pipeline_handler.cpp | 13 |
2 files changed, 13 insertions, 14 deletions
diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp index aa93da75..ced19a10 100644 --- a/src/libcamera/media_device.cpp +++ b/src/libcamera/media_device.cpp @@ -63,8 +63,7 @@ LOG_DEFINE_CATEGORY(MediaDevice) * populate() before the media graph can be queried. */ MediaDevice::MediaDevice(const std::string &deviceNode) - : deviceNode_(deviceNode), fd_(-1), valid_(false), acquired_(false), - lockOwner_(false) + : deviceNode_(deviceNode), fd_(-1), valid_(false), acquired_(false) { } @@ -146,15 +145,9 @@ bool MediaDevice::lock() if (fd_ == -1) return false; - /* Do not allow nested locking in the same libcamera instance. */ - if (lockOwner_) - return false; - if (lockf(fd_, F_TLOCK, 0)) return false; - lockOwner_ = true; - return true; } @@ -172,11 +165,6 @@ void MediaDevice::unlock() if (fd_ == -1) return; - if (!lockOwner_) - return; - - lockOwner_ = false; - lockf(fd_, F_ULOCK, 0); } 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; } /** |