From 5dd2d35fc5ca34f803d9720806b7b7a87473434f Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Mon, 28 Sep 2020 13:11:22 -0400 Subject: [PATCH] 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. --- tractor/_debug.py | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/tractor/_debug.py b/tractor/_debug.py index 99814ea..b9ed5a2 100644 --- a/tractor/_debug.py +++ b/tractor/_debug.py @@ -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