Move debugger wait inside OCA nursery
							parent
							
								
									d85f4fda57
								
							
						
					
					
						commit
						e1f128a79c
					
				| 
						 | 
					@ -12,7 +12,7 @@ import trio
 | 
				
			||||||
from async_generator import asynccontextmanager
 | 
					from async_generator import asynccontextmanager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from . import _debug
 | 
					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 .log import get_logger, get_loglevel
 | 
				
			||||||
from ._actor import Actor
 | 
					from ._actor import Actor
 | 
				
			||||||
from ._portal import Portal
 | 
					from ._portal import Portal
 | 
				
			||||||
| 
						 | 
					@ -263,6 +263,26 @@ async def _open_and_supervise_one_cancels_all_nursery(
 | 
				
			||||||
                        "to complete"
 | 
					                        "to complete"
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                except BaseException as err:
 | 
					                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
 | 
					                    # if the caller's scope errored then we activate our
 | 
				
			||||||
                    # one-cancels-all supervisor strategy (don't
 | 
					                    # one-cancels-all supervisor strategy (don't
 | 
				
			||||||
                    # worry more are coming).
 | 
					                    # worry more are coming).
 | 
				
			||||||
| 
						 | 
					@ -377,26 +397,12 @@ async def open_nursery(
 | 
				
			||||||
            async with open_root_actor(**kwargs) as actor:
 | 
					            async with open_root_actor(**kwargs) as actor:
 | 
				
			||||||
                assert actor is current_actor()
 | 
					                assert actor is current_actor()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                try:
 | 
					                # try:
 | 
				
			||||||
                async with _open_and_supervise_one_cancels_all_nursery(
 | 
					                async with _open_and_supervise_one_cancels_all_nursery(
 | 
				
			||||||
                    actor
 | 
					                    actor
 | 
				
			||||||
                ) as anursery:
 | 
					                ) as anursery:
 | 
				
			||||||
                    yield 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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        else:  # sub-nursery case
 | 
					        else:  # sub-nursery case
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            async with _open_and_supervise_one_cancels_all_nursery(
 | 
					            async with _open_and_supervise_one_cancels_all_nursery(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue