[Lldb-commits] [lldb] 183cb45 - [lldb-dap] Fixing a race during disconnect. (#135872)

via lldb-commits lldb-commits at lists.llvm.org
Wed Apr 16 07:52:20 PDT 2025


Author: John Harrison
Date: 2025-04-16T07:52:16-07:00
New Revision: 183cb45c1280b80a0022649d1db8a93544bb97b0

URL: https://github.com/llvm/llvm-project/commit/183cb45c1280b80a0022649d1db8a93544bb97b0
DIFF: https://github.com/llvm/llvm-project/commit/183cb45c1280b80a0022649d1db8a93544bb97b0.diff

LOG: [lldb-dap] Fixing a race during disconnect. (#135872)

While attempting to disconnect the DAP transport reader thread is
setting
`disconnecting` as soon as it sees a [disconnect
request](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Disconnect).

However, if it is processing another request when this disconnect
arrives the `DAP::Loop` handler may exit the loop without replying to
the disconnect request.

There has been some instability on the CI jobs due to this race, for
example https://lab.llvm.org/buildbot/#/builders/59/builds/16076

To address this, ensure we only return from `DAP::Loop` once we've
emptied the queue.

Added: 
    

Modified: 
    lldb/tools/lldb-dap/DAP.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/tools/lldb-dap/DAP.cpp b/lldb/tools/lldb-dap/DAP.cpp
index b752e9cfaeb85..597fe3a1e323b 100644
--- a/lldb/tools/lldb-dap/DAP.cpp
+++ b/lldb/tools/lldb-dap/DAP.cpp
@@ -921,7 +921,7 @@ llvm::Error DAP::Loop() {
     StopEventHandlers();
   });
 
-  while (!disconnecting) {
+  while (!disconnecting || !m_queue.empty()) {
     std::unique_lock<std::mutex> lock(m_queue_mutex);
     m_queue_cv.wait(lock, [&] { return disconnecting || !m_queue.empty(); });
 


        


More information about the lldb-commits mailing list