forked from goodboy/tractor
1
0
Fork 0

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
Tyler Goodlet 2020-09-28 13:11:22 -04:00
parent 25e93925b0
commit 5dd2d35fc5
1 changed files with 18 additions and 18 deletions

View File

@ -142,15 +142,15 @@ def handler(signum, frame):
pdbpp.pdb.Pdb.sigint_handler = handler pdbpp.pdb.Pdb.sigint_handler = handler
@contextmanager # @contextmanager
def _disable_sigint(): # def _disable_sigint():
try: # try:
# disable sigint handling while in debug # # disable sigint handling while in debug
prior_handler = signal.signal(signal.SIGINT, handler) # prior_handler = signal.signal(signal.SIGINT, handler)
yield # yield
finally: # finally:
# restore SIGINT handling # # restore SIGINT handling
signal.signal(signal.SIGINT, prior_handler) # signal.signal(signal.SIGINT, prior_handler)
async def _hijack_stdin_relay_to_child( async def _hijack_stdin_relay_to_child(
@ -162,13 +162,14 @@ async def _hijack_stdin_relay_to_child(
async with _acquire_debug_lock(): async with _acquire_debug_lock():
log.warning(f"Actor {subactor_uid} ACQUIRED stdin hijack lock") log.warning(f"Actor {subactor_uid} ACQUIRED stdin hijack lock")
with _disable_sigint(): # with _disable_sigint():
# indicate to child that we've locked stdio
yield 'Locked'
# wait for cancellation of stream by child # indicate to child that we've locked stdio
# indicating debugger is dis-engaged yield 'Locked'
await trio.sleep_forever()
# 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") 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}") log.debug(f"Exiting debugger for actor {actor}")
global _in_debug global _in_debug
_in_debug = False _in_debug = False
# actor.statespace['_in_debug'] = False
log.debug(f"Child {actor} released parent stdio lock") log.debug(f"Child {actor} released parent stdio lock")
async def _bp(): async def _bp():
@ -226,7 +226,6 @@ def _breakpoint(debug_func) -> Awaitable[None]:
enters the ``pdbpp`` debugging console. enters the ``pdbpp`` debugging console.
""" """
global _in_debug global _in_debug
# in_debug = actor.statespace.setdefault('_in_debug', False)
if _in_debug: if _in_debug:
# if **this** actor is already in debug mode block here # if **this** actor is already in debug mode block here
@ -241,7 +240,8 @@ def _breakpoint(debug_func) -> Awaitable[None]:
global _pdb_release_hook global _pdb_release_hook
_pdb_release_hook = do_unlock.set _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 _in_debug = True
# TODO: need a more robust check for the "root" actor # TODO: need a more robust check for the "root" actor