[compiler-rt] [NFC][TSan] Remove redundant Context::report_mtx (PR #228605)

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Sat Oct 3 09:54:32 PDT 2026


https://github.com/vitalybuka updated https://github.com/llvm/llvm-project/pull/228605

>From ba0e4512b258099a3f77f92dccbe51ff24319026 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Fri, 2 Oct 2026 15:32:05 -0700
Subject: [PATCH] [NFC][TSan] Remove redundant Context::report_mtx

Context::report_mtx was only ever acquired immediately alongside
ScopedErrorReportLock (in ScopedReport and BackgroundThread). Remove
report_mtx and MutexTypeReport and rely on ScopedErrorReportLock.

Assisted-by: Gemini

Pull Request: https://github.com/llvm/llvm-project/pull/228605
---
 compiler-rt/lib/tsan/rtl/tsan_defs.h         |  3 +--
 compiler-rt/lib/tsan/rtl/tsan_rtl.cpp        | 15 +++++----------
 compiler-rt/lib/tsan/rtl/tsan_rtl.h          |  1 -
 compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp |  6 +-----
 4 files changed, 7 insertions(+), 18 deletions(-)

diff --git a/compiler-rt/lib/tsan/rtl/tsan_defs.h b/compiler-rt/lib/tsan/rtl/tsan_defs.h
index 270d441dc90b7b..0396486f4464da 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_defs.h
+++ b/compiler-rt/lib/tsan/rtl/tsan_defs.h
@@ -199,8 +199,7 @@ enum ExternalTag : uptr {
 };
 
 enum {
-  MutexTypeReport = MutexLastCommon,
-  MutexTypeSyncVar,
+  MutexTypeSyncVar = MutexLastCommon,
   MutexTypeAnnotations,
   MutexTypeAtExit,
   MutexTypeFired,
diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp b/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp
index e00f2ab5917357..c6e7dce5ecb181 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp
@@ -390,7 +390,6 @@ void SlotUnlock(ThreadState* thr) {
 
 Context::Context()
     : initialized(),
-      report_mtx(MutexTypeReport),
       nreported(),
       thread_registry([](Tid tid) -> ThreadContextBase* {
         return new (Alloc(sizeof(ThreadContext))) ThreadContext(tid);
@@ -515,8 +514,7 @@ static void *BackgroundThread(void *arg) {
       u64 last = atomic_load(&ctx->last_symbolize_time_ns,
                              memory_order_relaxed);
       if (last != 0 && last + flags()->flush_symbolizer_ms * kMs2Ns < now) {
-        Lock l(&ctx->report_mtx);
-        ScopedErrorReportLock l2;
+        ScopedErrorReportLock l;
         SymbolizeFlush();
         atomic_store(&ctx->last_symbolize_time_ns, 0, memory_order_relaxed);
       }
@@ -849,7 +847,7 @@ void ForkBefore(ThreadState* thr, uptr pc) SANITIZER_NO_THREAD_SAFETY_ANALYSIS {
   ScopedErrorReportLock::Lock();
   AllocatorLockBeforeFork();
   // Suppress all reports in the pthread_atfork callbacks.
-  // Reports will deadlock on the report_mtx.
+  // Reports may deadlock.
   // We could ignore sync operations as well,
   // but so far it's unclear if it will do more good or harm.
   // Unnecessarily ignoring things can lead to false positives later.
@@ -1142,11 +1140,8 @@ namespace __sanitizer {
 using namespace __tsan;
 MutexMeta mutex_meta[] = {
     {MutexInvalid, "Invalid", {}},
-    {MutexThreadRegistry,
-     "ThreadRegistry",
-     {MutexTypeSlots, MutexTypeTrace, MutexTypeReport}},
-    {MutexTypeReport, "Report", {MutexTypeTrace}},
-    {MutexTypeSyncVar, "SyncVar", {MutexTypeReport, MutexTypeTrace}},
+    {MutexThreadRegistry, "ThreadRegistry", {MutexTypeSlots, MutexTypeTrace}},
+    {MutexTypeSyncVar, "SyncVar", {MutexTypeTrace}},
     {MutexTypeAnnotations, "Annotations", {}},
     {MutexTypeAtExit, "AtExit", {}},
     {MutexTypeFired, "Fired", {MutexLeaf}},
@@ -1158,7 +1153,7 @@ MutexMeta mutex_meta[] = {
      "Slot",
      {MutexMulti, MutexTypeTrace, MutexTypeSyncVar, MutexThreadRegistry,
       MutexTypeSlots}},
-    {MutexTypeSlots, "Slots", {MutexTypeTrace, MutexTypeReport}},
+    {MutexTypeSlots, "Slots", {MutexTypeTrace}},
     {},
 };
 
diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl.h b/compiler-rt/lib/tsan/rtl/tsan_rtl.h
index db3c879e9e030b..fcfbf2f445dfa1 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl.h
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl.h
@@ -317,7 +317,6 @@ struct Context {
 
   MetaMap metamap;
 
-  Mutex report_mtx;
   atomic_uint32_t nreported;
   atomic_uint64_t last_symbolize_time_ns;
 
diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp b/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp
index 3bf1d6a5a81e11..d248daed9202f4 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp
@@ -168,13 +168,9 @@ ScopedReportBase::ScopedReportBase(ReportType typ, uptr tag) {
   rep_ = New<ReportDesc>();
   rep_->typ = typ;
   rep_->tag = tag;
-  ctx->report_mtx.Lock();
 }
 
-ScopedReportBase::~ScopedReportBase() {
-  ctx->report_mtx.Unlock();
-  DestroyAndFree(rep_);
-}
+ScopedReportBase::~ScopedReportBase() { DestroyAndFree(rep_); }
 
 void ScopedReportBase::AddStack(StackTrace stack, bool suppressable) {
   ReportStack **rs = rep_->stacks.PushBack();



More information about the llvm-commits mailing list