[Lldb-commits] [lldb] [lldb-dap] Fix race condition when multiple threads stop simultaneously (PR #176230)

Greg Clayton via lldb-commits lldb-commits at lists.llvm.org
Fri Jan 16 10:52:39 PST 2026


================
@@ -0,0 +1,206 @@
+"""
+Test lldb-dap sends only a single stopped event when multiple threads
+stop simultaneously. This prevents VS Code race conditions where it
+cancels stack trace requests for the focus thread.
+
+Test cases:
+1. Multiple threads hit breakpoint simultaneously - only ONE stopped event.
+2. Focus thread exits - new valid focus thread selected.
+3. All threads visible via allThreadsStopped=true.
+"""
+
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+import lldbdap_testcase
+
+
+class TestDAP_stopEventSingle(lldbdap_testcase.DAPTestCaseBase):
+    @skipIfWindows
+    def test_single_stopped_event_multiple_threads(self):
+        """
+        Tests that when multiple threads hit a breakpoint simultaneously,
+        only a single stopped event is sent to VS Code.
+        """
+        program = self.getBuildArtifact("a.out")
+        self.build_and_launch(program)
+        source = "main.cpp"
+
+        # Set breakpoint where all threads will stop.
+        bp_line = line_number(source, "// break here")
+        breakpoint_ids = self.set_source_breakpoints(source, [bp_line])
+        self.assertEqual(len(breakpoint_ids), 1, "expect one breakpoint")
+
+        # Continue - all threads should hit breakpoint.
+        self.continue_to_breakpoints(breakpoint_ids)
+
+        # Should have 5 threads: main + 4 workers.
+        threads = self.dap_server.get_threads()
----------------
clayborg wrote:

Do we verify that we have at least two threads that are stopped with a reason anywhere? That will be important here to ensure this test is doing the right thing. This kind of test can also be a bit flaky when it is run on a machine that is running many tests concurrently, so I worry about how solid this test will be. 

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


More information about the lldb-commits mailing list