diff options
author | Hirokazu Honda <hiroh@chromium.org> | 2022-11-03 18:50:39 +0530 |
---|---|---|
committer | Umang Jain <umang.jain@ideasonboard.com> | 2022-11-11 16:25:46 +0530 |
commit | cd9e72944e55b5eb3526e5b0befe00940630a0ac (patch) | |
tree | 36fc8a535c54f9c37e993e707cb219d2f6596318 | |
parent | c39885ed9bd25b55dd1619c1755a55f6edeec7c4 (diff) |
libcamera: camera_manager: Apply clang thread safety annotation
This annotates member functions and variables of
CameraManager::Private by clang thread safety annotations.
Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
-rw-r--r-- | src/libcamera/camera_manager.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp index 2c100c24..b1785f75 100644 --- a/src/libcamera/camera_manager.cpp +++ b/src/libcamera/camera_manager.cpp @@ -42,8 +42,8 @@ public: int start(); void addCamera(std::shared_ptr<Camera> camera, - const std::vector<dev_t> &devnums); - void removeCamera(Camera *camera); + const std::vector<dev_t> &devnums) LIBCAMERA_TSA_EXCLUDES(mutex_); + void removeCamera(Camera *camera) LIBCAMERA_TSA_EXCLUDES(mutex_); /* * This mutex protects @@ -52,8 +52,8 @@ public: * - cameras_ and camerasByDevnum_ after initialization */ mutable Mutex mutex_; - std::vector<std::shared_ptr<Camera>> cameras_; - std::map<dev_t, std::weak_ptr<Camera>> camerasByDevnum_; + std::vector<std::shared_ptr<Camera>> cameras_ LIBCAMERA_TSA_GUARDED_BY(mutex_); + std::map<dev_t, std::weak_ptr<Camera>> camerasByDevnum_ LIBCAMERA_TSA_GUARDED_BY(mutex_); protected: void run() override; @@ -61,11 +61,11 @@ protected: private: int init(); void createPipelineHandlers(); - void cleanup(); + void cleanup() LIBCAMERA_TSA_EXCLUDES(mutex_); ConditionVariable cv_; - bool initialized_; - int status_; + bool initialized_ LIBCAMERA_TSA_GUARDED_BY(mutex_); + int status_ LIBCAMERA_TSA_GUARDED_BY(mutex_); std::unique_ptr<DeviceEnumerator> enumerator_; @@ -87,7 +87,9 @@ int CameraManager::Private::start() { MutexLocker locker(mutex_); - cv_.wait(locker, [&] { return initialized_; }); + cv_.wait(locker, [&]() LIBCAMERA_TSA_REQUIRES(mutex_) { + return initialized_; + }); status = status_; } @@ -178,7 +180,11 @@ void CameraManager::Private::cleanup() * process deletion requests from the thread's message queue as the event * loop is not in action here. */ - cameras_.clear(); + { + MutexLocker locker(mutex_); + cameras_.clear(); + } + dispatchMessages(Message::Type::DeferredDelete); enumerator_.reset(nullptr); |