forked from goodboy/tractor
				
			Move debugger wait inside OCA nursery
							parent
							
								
									da9a33bf37
								
							
						
					
					
						commit
						ef4dbdcf85
					
				|  | @ -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 | ||||||
|  | @ -254,6 +254,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). | ||||||
|  | @ -367,25 +387,11 @@ 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 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue