Always call `Actor.cancel()` at end of root's main task

It's simpler and the only real logical difference is logging messages.
This should also give us an overall consistent tear down sequence.
drop_warn
Tyler Goodlet 2020-10-14 13:59:57 -04:00
parent 676cdafa8f
commit 3b8684f655
1 changed files with 5 additions and 12 deletions

View File

@ -1083,20 +1083,13 @@ async def _start_actor(
try: try:
result = await main() result = await main()
except (Exception, trio.MultiError) as err: except (Exception, trio.MultiError) as err:
try:
log.exception("Actor crashed:") log.exception("Actor crashed:")
await _debug._maybe_enter_pm(err) await _debug._maybe_enter_pm(err)
raise raise
finally: finally:
await actor.cancel() await actor.cancel()
# XXX: the actor is cancelled when this context is complete
# given that there are no more active peer channels connected
actor.cancel_server()
actor._service_n.cancel_scope.cancel()
# unset module state # unset module state
_state._current_actor = None _state._current_actor = None
log.info("Completed async main") log.info("Completed async main")