This test was already disabled going from windows -> linux because it was timing out there. The PR: https://github.com/llvm/llvm-project/pull/179799 seems to have exacerbated whatever this stall was, and now we're seeing it when debugging from a linux host to a remote linux as well. The native local host tests works correctly on all the bots that we have, however. So I'm disabling the remote test till we can figure out why this is problematic.
64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
"""
|
|
Test using SendAsyncInterrupt to interrupt an "attach wait"
|
|
"""
|
|
|
|
import lldb
|
|
import sys
|
|
import time
|
|
import threading
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
import lldbsuite.test.lldbutil
|
|
|
|
|
|
class AttachCancelTestCase(TestBase):
|
|
NO_DEBUG_INFO_TESTCASE = True
|
|
|
|
@skipIf(
|
|
remote=True,
|
|
hostoslist=["windows", "linux"],
|
|
bugnumber="https://github.com/llvm/llvm-project/issues/115618",
|
|
)
|
|
def test_scripted_implementation(self):
|
|
"""Test that cancelling a stuck "attach waitfor" works."""
|
|
# First make an empty target for the attach:
|
|
target = self.dbg.CreateTarget(None)
|
|
|
|
# We need to cancel this, so we need to do the attach
|
|
# on a separate thread:
|
|
class AttachThread(threading.Thread):
|
|
def __init__(self, target, error):
|
|
# Make this a daemon thread so if we don't manage to interrupt,
|
|
# Python will keep this thread from hanging the test.
|
|
threading.Thread.__init__(self, daemon=True)
|
|
self.target = target
|
|
self.error = error
|
|
|
|
def run(self):
|
|
self.target.AttachToProcessWithName(
|
|
lldb.SBListener(), "LLDB-No-Such-Process", True, self.error
|
|
)
|
|
|
|
error = lldb.SBError()
|
|
thread = AttachThread(target, error)
|
|
thread.start()
|
|
|
|
# Now wait till the attach on the child thread has made a process
|
|
# for the attach attempt:
|
|
while not target.process.IsValid():
|
|
time.sleep(1)
|
|
# I don't have a positive signal for "we started the attach attempt"
|
|
# so the best I can do is sleep a bit more here to give that a chance
|
|
# to start:
|
|
time.sleep(1)
|
|
|
|
# Now send the attach interrupt:
|
|
target.process.SendAsyncInterrupt()
|
|
# We don't want to stall if we can't interrupt, so join with a timeout:
|
|
thread.join(60)
|
|
if thread.is_alive():
|
|
self.fail("The attach thread is alive after timeout interval")
|
|
|
|
# Now check the error, should say the attach was interrupted:
|
|
self.assertTrue(error.Fail(), "We succeeded in not attaching")
|