[libcamera-devel] [PATCH v2 2/5] libcamera: base: thread: Apply clang thread safety annotation
Umang Jain
umang.jain at ideasonboard.com
Mon Jun 20 18:50:24 CEST 2022
From: Hirokazu Honda <hiroh at chromium.org>
This annotates member variables of ThreadData by clang thread
safety annotations.
Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
---
src/libcamera/base/thread.cpp | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/src/libcamera/base/thread.cpp b/src/libcamera/base/thread.cpp
index 6bda9d14..2e26b83c 100644
--- a/src/libcamera/base/thread.cpp
+++ b/src/libcamera/base/thread.cpp
@@ -151,7 +151,7 @@ private:
friend class ThreadMain;
Thread *thread_;
- bool running_;
+ bool running_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
pid_t tid_;
Mutex mutex_;
@@ -160,7 +160,7 @@ private:
ConditionVariable cv_;
std::atomic<bool> exit_;
- int exitCode_;
+ int exitCode_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
MessageQueue messages_;
};
@@ -422,11 +422,19 @@ bool Thread::wait(utils::duration duration)
{
MutexLocker locker(data_->mutex_);
- if (duration == utils::duration::max())
- data_->cv_.wait(locker, [&]() { return !data_->running_; });
- else
- hasFinished = data_->cv_.wait_for(locker, duration,
- [&]() { return !data_->running_; });
+ if (duration == utils::duration::max()) {
+ data_->cv_.wait(
+ locker,
+ [&]() LIBCAMERA_TSA_REQUIRES(data_->mutex_) {
+ return !data_->running_;
+ });
+ } else {
+ hasFinished = data_->cv_.wait_for(
+ locker, duration,
+ [&]() LIBCAMERA_TSA_REQUIRES(data_->mutex_) {
+ return !data_->running_;
+ });
+ }
}
if (thread_.joinable())
--
2.31.1
More information about the libcamera-devel
mailing list