forked from goodboy/tractor
Huh, maybe we don't need to block SIGINT
Seems like the request task cancel scope is actually solving all the deadlock issues and masking SIGINT isn't changing much behaviour at all. I think let's keep it unmasked for now in case it does turn out useful in cancelling from unrecoverable states while in debug.debug_tests
parent
25e93925b0
commit
5dd2d35fc5
tractor
|
@ -142,15 +142,15 @@ def handler(signum, frame):
|
|||
pdbpp.pdb.Pdb.sigint_handler = handler
|
||||
|
||||
|
||||
@contextmanager
|
||||
def _disable_sigint():
|
||||
try:
|
||||
# disable sigint handling while in debug
|
||||
prior_handler = signal.signal(signal.SIGINT, handler)
|
||||
yield
|
||||
finally:
|
||||
# restore SIGINT handling
|
||||
signal.signal(signal.SIGINT, prior_handler)
|
||||
# @contextmanager
|
||||
# def _disable_sigint():
|
||||
# try:
|
||||
# # disable sigint handling while in debug
|
||||
# prior_handler = signal.signal(signal.SIGINT, handler)
|
||||
# yield
|
||||
# finally:
|
||||
# # restore SIGINT handling
|
||||
# signal.signal(signal.SIGINT, prior_handler)
|
||||
|
||||
|
||||
async def _hijack_stdin_relay_to_child(
|
||||
|
@ -162,13 +162,14 @@ async def _hijack_stdin_relay_to_child(
|
|||
async with _acquire_debug_lock():
|
||||
log.warning(f"Actor {subactor_uid} ACQUIRED stdin hijack lock")
|
||||
|
||||
with _disable_sigint():
|
||||
# indicate to child that we've locked stdio
|
||||
yield 'Locked'
|
||||
# with _disable_sigint():
|
||||
|
||||
# wait for cancellation of stream by child
|
||||
# indicating debugger is dis-engaged
|
||||
await trio.sleep_forever()
|
||||
# indicate to child that we've locked stdio
|
||||
yield 'Locked'
|
||||
|
||||
# wait for cancellation of stream by child
|
||||
# indicating debugger is dis-engaged
|
||||
await trio.sleep_forever()
|
||||
|
||||
log.debug(f"Actor {subactor_uid} RELEASED stdin hijack lock")
|
||||
|
||||
|
@ -218,7 +219,6 @@ def _breakpoint(debug_func) -> Awaitable[None]:
|
|||
log.debug(f"Exiting debugger for actor {actor}")
|
||||
global _in_debug
|
||||
_in_debug = False
|
||||
# actor.statespace['_in_debug'] = False
|
||||
log.debug(f"Child {actor} released parent stdio lock")
|
||||
|
||||
async def _bp():
|
||||
|
@ -226,7 +226,6 @@ def _breakpoint(debug_func) -> Awaitable[None]:
|
|||
enters the ``pdbpp`` debugging console.
|
||||
"""
|
||||
global _in_debug
|
||||
# in_debug = actor.statespace.setdefault('_in_debug', False)
|
||||
|
||||
if _in_debug:
|
||||
# if **this** actor is already in debug mode block here
|
||||
|
@ -241,7 +240,8 @@ def _breakpoint(debug_func) -> Awaitable[None]:
|
|||
global _pdb_release_hook
|
||||
_pdb_release_hook = do_unlock.set
|
||||
|
||||
# actor.statespace['_in_debug'] = True
|
||||
# mark local actor as "in debug mode" to avoid recurrent
|
||||
# entries/requests to the root process
|
||||
_in_debug = True
|
||||
|
||||
# TODO: need a more robust check for the "root" actor
|
||||
|
|
Loading…
Reference in New Issue