[Lldb-commits] [lldb] [lldb-dap] Fix mutex acquisition order for modules event. (PR #163821)
via lldb-commits
lldb-commits at lists.llvm.org
Thu Oct 16 09:44:03 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Ebuka Ezike (da-viper)
<details>
<summary>Changes</summary>
The modules event requires the `APIMutex` to create the module load address. this may happen at the same time the `module request` is handled.
The modules request also requires the `APIMutex` and the `modules_mutex, set the order to acquire the mutexes.
---
Full diff: https://github.com/llvm/llvm-project/pull/163821.diff
1 Files Affected:
- (modified) lldb/tools/lldb-dap/DAP.cpp (+6-1)
``````````diff
diff --git a/lldb/tools/lldb-dap/DAP.cpp b/lldb/tools/lldb-dap/DAP.cpp
index f76656e98ca01..003b55fa31610 100644
--- a/lldb/tools/lldb-dap/DAP.cpp
+++ b/lldb/tools/lldb-dap/DAP.cpp
@@ -1437,7 +1437,12 @@ void DAP::EventThread() {
const bool remove_module =
event_mask & lldb::SBTarget::eBroadcastBitModulesUnloaded;
- std::lock_guard<std::mutex> guard(modules_mutex);
+ // NOTE: Both mutexes must be acquired (API mutex first, then modules
+ // mutex) to prevent deadlock when handling `modules_request`, which
+ // also requires both locks.
+ lldb::SBMutex api_mutex = GetAPIMutex();
+ std::lock_guard api_guard(api_mutex);
+ std::lock_guard modules_guard(modules_mutex);
for (uint32_t i = 0; i < num_modules; ++i) {
lldb::SBModule module =
lldb::SBTarget::GetModuleAtIndexFromEvent(i, event);
``````````
</details>
https://github.com/llvm/llvm-project/pull/163821
More information about the lldb-commits
mailing list