[Lldb-commits] [lldb] [lldb] Make PrivateStateThread::m_is_running atomic (PR #231458)

via lldb-commits lldb-commits at lists.llvm.org
Tue Oct 13 04:12:09 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: Raphael Isemann (Teemperor)

<details>
<summary>Changes</summary>

The flag is written by the thread starting the private state thread (e.g. in Process::Attach) and read from other threads via PrivateStateThreadIsRunning(), e.g. in Process::SendAsyncInterrupt.

This patch makes the variable atomic as it's just used as a global toggle to indicate whether the thread is running.

Original TSan report:

```
  Read of size 1 at 0x00010bf46a20 by main thread:
    #<!-- -->0 lldb_private::Process::PrivateStateThread::IsRunning() Process.h:3340
    #<!-- -->1 lldb_private::Process::PrivateStateThreadIsRunning() const Process.h:3177
    #<!-- -->2 lldb_private::Process::SendAsyncInterrupt(lldb_private::Thread*) Process.cpp:4268
    #<!-- -->3 lldb::SBProcess::SendAsyncInterrupt() SBProcess.cpp:701 (liblldb.24.0.0git.dylib:arm64+0xf7474)

  Previous write of size 1 at 0x00010bf46a20 by thread T1 (mutexes: write M0):
    #<!-- -->0 lldb_private::Process::PrivateStateThread::StartupThread() Process.cpp:4124
    #<!-- -->1 lldb_private::Process::StartPrivateStateThread(lldb::StateType, bool, std::__1::shared_ptr<lldb_private::Process::PrivateStateThread>*) Process.cpp:4190
    #<!-- -->2 lldb_private::Process::Attach(lldb_private::ProcessAttachInfo&) Process.cpp:3290
    #<!-- -->3 PlatformPOSIX::Attach(lldb_private::ProcessAttachInfo&, lldb_private::Debugger&, lldb_private::Target*, lldb_private::Status&) PlatformPOSIX.cpp:415
    #<!-- -->4 lldb_private::Target::Attach(lldb_private::ProcessAttachInfo&, lldb_private::Stream*) Target.cpp:3859
    #<!-- -->5 AttachToProcess(lldb_private::ProcessAttachInfo&, lldb_private::Target&) SBTarget.cpp:102
    #<!-- -->6 lldb::SBTarget::AttachToProcessWithName(lldb::SBListener&, char const*, bool, lldb::SBError&) SBTarget.cpp:534
```

assisted-by: claude

---
Full diff: https://github.com/llvm/llvm-project/pull/231458.diff


1 Files Affected:

- (modified) lldb/include/lldb/Target/Process.h (+2-1) 


``````````diff
diff --git a/lldb/include/lldb/Target/Process.h b/lldb/include/lldb/Target/Process.h
index 226c58034dd65..7106d5e4e3638 100644
--- a/lldb/include/lldb/Target/Process.h
+++ b/lldb/include/lldb/Target/Process.h
@@ -11,6 +11,7 @@
 
 #include "lldb/Host/Config.h"
 
+#include <atomic>
 #include <climits>
 
 #include <chrono>
@@ -3404,7 +3405,7 @@ void PruneThreadPlans();
     //the < private state management.
     ProcessRunLock m_public_run_lock;
     ProcessRunLock m_private_run_lock;
-    bool m_is_running = false;
+    std::atomic<bool> m_is_running = false;
     Purpose m_purpose;
     ///< This will be the thread name given to the Private State HostThread when
     ///< it gets spun up.

``````````

</details>


https://github.com/llvm/llvm-project/pull/231458


More information about the lldb-commits mailing list