llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: Charles Zablit (charles-zablit)

<details>
<summary>Changes</summary>

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.

---
Full diff: https://github.com/llvm/llvm-project/pull/172879.diff


1 Files Affected:

- (modified) lldb/test/API/tools/lldb-dap/attach/TestDAP_attach.py (+18-7) 


``````````diff
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):
         """

``````````

</details>


https://github.com/llvm/llvm-project/pull/172879
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to