diff --git a/modules/core/src/ocl.cpp b/modules/core/src/ocl.cpp index 8479667fd7..7d3a13a855 100644 --- a/modules/core/src/ocl.cpp +++ b/modules/core/src/ocl.cpp @@ -3500,8 +3500,10 @@ struct Kernel::Impl void addUMat(const UMat& m, bool dst) { + // TSAN false positive: see #27638 CV_Assert(nu < MAX_ARRS && m.u && m.u->urefcount > 0); u[nu] = m.u; + // TSAN false positive: see #27638 CV_XADD(&m.u->urefcount, 1); nu++; if(dst && m.u->tempUMat()) @@ -5670,6 +5672,7 @@ public: if(!u) return; + // Next two lines: TSAN false positive: see #27638 CV_Assert(u->urefcount == 0); CV_Assert(u->refcount == 0 && "UMat deallocation error: some derived Mat is still alive"); @@ -6602,11 +6605,13 @@ public: void flushCleanupQueue() const { + // TSAN false positive: see #27638 if (!cleanupQueue.empty()) { std::deque q; { cv::AutoLock lock(cleanupQueueMutex); + // TSAN false positive: see #27638 q.swap(cleanupQueue); } for (std::deque::const_iterator i = q.begin(); i != q.end(); ++i)