Move debugger wait inside OCA nursery
							parent
							
								
									d85f4fda57
								
							
						
					
					
						commit
						e1f128a79c
					
				| 
						 | 
				
			
			@ -12,7 +12,7 @@ import trio
 | 
			
		|||
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
 | 
			
		||||
| 
						 | 
				
			
			@ -263,6 +263,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).
 | 
			
		||||
| 
						 | 
				
			
			@ -377,25 +397,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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue