Author: DrSergei Date: 2025-07-02T12:16:48+01:00 New Revision: 5fe63ae9a3fb7502ce7ed076ea14def97d79e85e
URL: https://github.com/llvm/llvm-project/commit/5fe63ae9a3fb7502ce7ed076ea14def97d79e85e DIFF: https://github.com/llvm/llvm-project/commit/5fe63ae9a3fb7502ce7ed076ea14def97d79e85e.diff LOG: [lldb-dap] Fix flaky test TestDAP_server (#145231) This patch fixes a possible data race between main and event handler threads. Terminated event can be sent from `Disconnect` function or event handler. Consequently, there are some possible sequences of events. We must check events twice, because without getting an exited event, `exit_status` will be None. But, we don't know the order of events (for example, we can get terminated event before exited event), so we check events by filter. It is correct, because terminated event will be sent only once (guarded by `llvm::call_once`). This patch moved from [145010](https://github.com/llvm/llvm-project/pull/145010) and based on idea from this [comment](https://github.com/llvm/llvm-project/pull/145010#discussion_r2159637210). Added: Modified: lldb/test/API/tools/lldb-dap/server/TestDAP_server.py lldb/tools/lldb-dap/tool/lldb-dap.cpp Removed: ################################################################################ diff --git a/lldb/test/API/tools/lldb-dap/server/TestDAP_server.py b/lldb/test/API/tools/lldb-dap/server/TestDAP_server.py index 592a4cfb0a88b..e01320c25b155 100644 --- a/lldb/test/API/tools/lldb-dap/server/TestDAP_server.py +++ b/lldb/test/API/tools/lldb-dap/server/TestDAP_server.py @@ -101,7 +101,9 @@ def test_server_interrupt(self): # Interrupt the server which should disconnect all clients. process.send_signal(signal.SIGINT) - self.dap_server.wait_for_terminated() + # Wait for both events since they can happen in any order. + self.dap_server.wait_for_event(["terminated", "exited"]) + self.dap_server.wait_for_event(["terminated", "exited"]) self.assertIsNotNone( self.dap_server.exit_status, "Process exited before interrupting lldb-dap server", diff --git a/lldb/tools/lldb-dap/tool/lldb-dap.cpp b/lldb/tools/lldb-dap/tool/lldb-dap.cpp index 2799d10ae84ba..8bba4162aa7bf 100644 --- a/lldb/tools/lldb-dap/tool/lldb-dap.cpp +++ b/lldb/tools/lldb-dap/tool/lldb-dap.cpp @@ -351,8 +351,6 @@ serveConnection(const Socket::SocketProtocol &protocol, const std::string &name, << " disconnected failed: " << llvm::toString(std::move(error)) << "\n"; } - // Close the socket to ensure the DAP::Loop read finishes. - sock->Close(); } } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits