forked from goodboy/tractor
				
			Ack our inability to hard kill sub-procs
							parent
							
								
									fc2cb610b9
								
							
						
					
					
						commit
						29ed065dc4
					
				| 
						 | 
				
			
			@ -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')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -188,8 +188,17 @@ async def spawn_subactor(
 | 
			
		|||
        # the outer scope since no actor zombies are
 | 
			
		||||
        # ever allowed. This ``__aexit__()`` also shields
 | 
			
		||||
        # internally.
 | 
			
		||||
        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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue