Ignore drainer-task nursery RTE during context exit
							parent
							
								
									a7faa26686
								
							
						
					
					
						commit
						b5a27e7864
					
				|  | @ -539,7 +539,6 @@ class Context: | ||||||
|             # from ._debug import breakpoint |             # from ._debug import breakpoint | ||||||
|             # await breakpoint() |             # await breakpoint() | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|         # XXX: this will break early callee results sending |         # XXX: this will break early callee results sending | ||||||
|         # since when `.result()` is finally called, this |         # since when `.result()` is finally called, this | ||||||
|         # chan will be closed.. |         # chan will be closed.. | ||||||
|  | @ -966,8 +965,12 @@ class Context: | ||||||
| 
 | 
 | ||||||
|             local_uid = current_actor().uid |             local_uid = current_actor().uid | ||||||
|             lines = [ |             lines = [ | ||||||
|                 f'Actor-task context {cid}@{local_uid} was overrun by remote!', |                 f'OVERRUN on actor-task context {cid}@{local_uid}!\n' | ||||||
|                 f'sender actor: {uid}', |                 # TODO: put remote task name here if possible? | ||||||
|  |                 f'remote sender actor: {uid}', | ||||||
|  |                 # TODO: put task func name here and maybe an arrow | ||||||
|  |                 # from sender to overrunner? | ||||||
|  |                 # f'local task {self.func_name}' | ||||||
|             ] |             ] | ||||||
|             if not self._stream_opened: |             if not self._stream_opened: | ||||||
|                 lines.insert( |                 lines.insert( | ||||||
|  | @ -988,13 +991,17 @@ class Context: | ||||||
|                 ): |                 ): | ||||||
|                     self._overflow_q.append(msg) |                     self._overflow_q.append(msg) | ||||||
|                     n = self._scope_nursery |                     n = self._scope_nursery | ||||||
|                     if n.child_tasks: |  | ||||||
|                         from . import _debug |  | ||||||
|                         await _debug.breakpoint() |  | ||||||
|                     assert not n.child_tasks |                     assert not n.child_tasks | ||||||
|  |                     try: | ||||||
|                         n.start_soon( |                         n.start_soon( | ||||||
|                             self._drain_overflows, |                             self._drain_overflows, | ||||||
|                         ) |                         ) | ||||||
|  |                     except RuntimeError: | ||||||
|  |                         # if the nursery is already cancelled due to | ||||||
|  |                         # this context exiting or in error, we ignore | ||||||
|  |                         # the nursery error since we never expected | ||||||
|  |                         # anything different. | ||||||
|  |                         return False | ||||||
|             else: |             else: | ||||||
|                 try: |                 try: | ||||||
|                     raise StreamOverrun(text) |                     raise StreamOverrun(text) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue