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"],
|
|
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")
|