diff options
Diffstat (limited to 'pym/_emerge/SubProcess.py')
-rw-r--r-- | pym/_emerge/SubProcess.py | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/pym/_emerge/SubProcess.py b/pym/_emerge/SubProcess.py index b1b5201eb..b6489c393 100644 --- a/pym/_emerge/SubProcess.py +++ b/pym/_emerge/SubProcess.py @@ -61,7 +61,21 @@ class SubProcess(AbstractPollTask): return self.returncode if self._registered: - self.scheduler.schedule(self._reg_id) + if self.cancelled: + timeout = 1000 + self.scheduler.schedule(self._reg_id, timeout=timeout) + if self._registered: + try: + os.kill(self.pid, signal.SIGKILL) + except OSError as e: + if e.errno != errno.ESRCH: + raise + del e + self.scheduler.schedule(self._reg_id, timeout=timeout) + if self._registered: + self._zombie() + else: + self.scheduler.schedule(self._reg_id) self._unregister() if self.returncode is not None: return self.returncode @@ -78,6 +92,9 @@ class SubProcess(AbstractPollTask): return self.returncode + def _zombie(self): + pass + def _unregister(self): """ Unregister from the scheduler and close open files. |