Disable thread sanitization when CV_USE_GLOBAL_WORKERS_COND_VAR is not set.
authorVincent Rabaud <vrabaud@google.com>
Mon, 8 Feb 2021 15:53:37 +0000 (16:53 +0100)
committerVincent Rabaud <vrabaud@google.com>
Tue, 9 Feb 2021 13:12:39 +0000 (14:12 +0100)
This fixes #19463

modules/core/src/parallel_impl.cpp

index 8638af9..7f30c9d 100644 (file)
@@ -382,6 +382,16 @@ public:
 };
 
 
+// Disable thread sanitization check when CV_USE_GLOBAL_WORKERS_COND_VAR is not
+// set because it triggers as the main thread reads isActive while the children
+// thread writes it (but it all works out because a mutex is locked in the main
+// thread and isActive re-checked).
+// This is to solve issue #19463.
+#if !defined(CV_USE_GLOBAL_WORKERS_COND_VAR) && defined(__clang__) && defined(__has_feature)
+#if __has_feature(thread_sanitizer)
+__attribute__((no_sanitize("thread")))
+#endif
+#endif
 void WorkerThread::thread_body()
 {
     (void)cv::utils::getThreadID(); // notify OpenCV about new thread