diff options
author | Zac Medico <zmedico@gentoo.org> | 2010-08-13 07:47:56 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2010-08-13 07:47:56 -0700 |
commit | 9a5f9cf8f6a8ff78cc124c40aaebcedd7be8d059 (patch) | |
tree | 5b77dab8cb645ebca3405e9650d8eeaf197f02b2 /pym/_emerge/SubProcess.py | |
parent | 12cbc8821476dcbac38464a41f7cb336da7ac0c9 (diff) | |
download | portage-9a5f9cf8f6a8ff78cc124c40aaebcedd7be8d059.tar.gz portage-9a5f9cf8f6a8ff78cc124c40aaebcedd7be8d059.tar.bz2 portage-9a5f9cf8f6a8ff78cc124c40aaebcedd7be8d059.zip |
Bug #278895 - After EbuildIpcDaemon identifies an ebuild process that
has left an orphan child process running in the background, generate
an eerror message about a 'zombie' process and note the pid.
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. |