https://github.com/charles-zablit created https://github.com/llvm/llvm-project/pull/172879
This patch fixes a timeout in the monitor thread of the `test_by_name_waitFor` test. Currently, if `self.attach` fails, the `spawn_thread` will never finish and the test will eventually timeout after the 15mins timeout. We now ensure that we always join the thread at the end of the test. >From 85f80882a497ad071b33c4efbc638226edd9a6b3 Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Thu, 18 Dec 2025 16:59:34 +0000 Subject: [PATCH] [lldb-dap] refactor monitor thread in tests --- .../tools/lldb-dap/attach/TestDAP_attach.py | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/lldb/test/API/tools/lldb-dap/attach/TestDAP_attach.py b/lldb/test/API/tools/lldb-dap/attach/TestDAP_attach.py index d6287397a93b0..7d1b3750a04a2 100644 --- a/lldb/test/API/tools/lldb-dap/attach/TestDAP_attach.py +++ b/lldb/test/API/tools/lldb-dap/attach/TestDAP_attach.py @@ -16,7 +16,7 @@ @skipIf(oslist=["linux"], archs=["arm$"]) class TestDAP_attach(lldbdap_testcase.DAPTestCaseBase): def spawn(self, args): - self.process = subprocess.Popen( + self.target_process = subprocess.Popen( args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, @@ -27,12 +27,17 @@ def spawn(self, args): def spawn_and_wait(self, program, delay): time.sleep(delay) self.spawn([program]) - self.process.wait() + proc = self.target_process + # Wait for either the process to exit or the event to be set + while proc.poll() is None and not self.spawn_event.is_set(): + time.sleep(0.1) + proc.kill() + proc.wait() def continue_and_verify_pid(self): self.do_continue() - out, _ = self.process.communicate("foo") - self.assertIn(f"pid = {self.process.pid}", out) + out, _ = self.target_process.communicate("foo") + self.assertIn(f"pid = {self.target_process.pid}", out) def test_by_pid(self): """ @@ -40,7 +45,7 @@ def test_by_pid(self): """ program = self.build_and_create_debug_adapter_for_attach() self.spawn([program]) - self.attach(pid=self.process.pid) + self.attach(pid=self.target_process.pid) self.continue_and_verify_pid() def test_by_name(self): @@ -65,6 +70,7 @@ def test_by_name_waitFor(self): doesn't exist yet. """ program = self.build_and_create_debug_adapter_for_attach() + self.spawn_event = threading.Event() self.spawn_thread = threading.Thread( target=self.spawn_and_wait, args=( @@ -73,8 +79,13 @@ def test_by_name_waitFor(self): ), ) self.spawn_thread.start() - self.attach(program=program, waitFor=True) - self.continue_and_verify_pid() + try: + self.attach(program=program, waitFor=True) + self.continue_and_verify_pid() + finally: + self.spawn_event.set() + if self.spawn_thread.is_alive(): + self.spawn_thread.join(timeout=10) def test_attach_with_missing_debuggerId_or_targetId(self): """ _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
