forked from goodboy/tractor
1
0
Fork 0

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,19 +1083,12 @@ async def _start_actor(
try:
result = await main()
except (Exception, trio.MultiError) as err:
try:
log.exception("Actor crashed:")
await _debug._maybe_enter_pm(err)
log.exception("Actor crashed:")
await _debug._maybe_enter_pm(err)
raise
finally:
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()
raise
finally:
await actor.cancel()
# unset module state
_state._current_actor = None