forked from goodboy/tractor
1
0
Fork 0

Ack our inability to hard kill sub-procs

debug_tests
Tyler Goodlet 2020-09-28 13:56:42 -04:00
parent fc2cb610b9
commit 29ed065dc4
2 changed files with 15 additions and 3 deletions

View File

@ -278,7 +278,8 @@ class Portal:
try:
# send cancel cmd - might not get response
# XXX: sure would be nice to make this work with a proper shield
# with trio.CancelScope(shield=True):
# with trio.CancelScope() as cancel_scope:
# with trio.CancelScope(shield=True) as cancel_scope:
with trio.move_on_after(0.5) as cancel_scope:
cancel_scope.shield = True
await self.run('self', 'cancel')

View File

@ -188,8 +188,17 @@ async def spawn_subactor(
# the outer scope since no actor zombies are
# ever allowed. This ``__aexit__()`` also shields
# internally.
async with proc:
log.debug(f"Terminating {proc}")
log.debug(f"Attempting to kill {proc}")
# NOTE: this timeout effectively does nothing right now since
# we are shielding the ``.wait()`` inside ``new_proc()`` which
# will pretty much never release until the process exits.
with trio.move_on_after(3) as cs:
async with proc:
log.debug(f"Terminating {proc}")
if cs.cancelled_caught:
log.critical(f"HARD KILLING {proc}")
proc.kill()
async def new_proc(
@ -354,6 +363,8 @@ async def new_proc(
await proc_waiter(proc)
proc.join()
# This is again common logic for all backends:
log.debug(f"Joined {proc}")
# pop child entry to indicate we are no longer managing this subactor
subactor, proc, portal = actor_nursery._children.pop(subactor.uid)