Skip to content

Commit

Permalink
Move debugger wait inside OCA nursery
Browse files Browse the repository at this point in the history
  • Loading branch information
goodboy committed Jun 30, 2021
1 parent d2b5d13 commit 498cd7e
Showing 1 changed file with 26 additions and 20 deletions.
46 changes: 26 additions & 20 deletions tractor/_trionics.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from async_generator import asynccontextmanager

from . import _debug
from ._state import current_actor, is_main_process
from ._state import current_actor, is_main_process, is_root_process
from .log import get_logger, get_loglevel
from ._actor import Actor
from ._portal import Portal
Expand Down Expand Up @@ -254,6 +254,26 @@ async def _open_and_supervise_one_cancels_all_nursery(
"to complete"
)
except BaseException as err:

if is_root_process() and (
type(err) in {
Exception, trio.MultiError, trio.Cancelled
}
):
# if we error in the root but the debugger is
# engaged we don't want to prematurely kill (and
# thus clobber access to) the local tty streams.
# instead try to wait for pdb to be released before
# tearing down.
debug_complete = _debug._pdb_complete
if debug_complete and not debug_complete.is_set():
log.warning(
"Root has errored but pdb is active..waiting "
"on debug lock")
await _debug._pdb_complete.wait()

# raise

# if the caller's scope errored then we activate our
# one-cancels-all supervisor strategy (don't
# worry more are coming).
Expand Down Expand Up @@ -368,25 +388,11 @@ async def open_nursery(
async with open_root_actor(**kwargs) as actor:
assert actor is current_actor()

try:
async with _open_and_supervise_one_cancels_all_nursery(
actor
) as anursery:
yield anursery

except (Exception, trio.MultiError, trio.Cancelled):
# if we error in the root but the debugger is
# engaged we don't want to prematurely kill (and
# thus clobber access to) the local tty streams.
# instead try to wait for pdb to be released before
# tearing down.
if not _debug._pdb_complete.is_set():
log.warning(
"Root has errored but pdb is active..waiting "
"on debug lock")
await _debug._pdb_complete.wait()

raise
# try:
async with _open_and_supervise_one_cancels_all_nursery(
actor
) as anursery:
yield anursery

else: # sub-nursery case

Expand Down

0 comments on commit 498cd7e

Please sign in to comment.