diff options
author | Zac Medico <zmedico@gentoo.org> | 2010-08-14 00:10:07 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2010-08-14 00:10:07 -0700 |
commit | de2cbf6e28da9ebbcef7946186df042f28c09808 (patch) | |
tree | ab7bfc95a2a024723e73b131d7d50788cd8b9c26 /pym/_emerge/SubProcess.py | |
parent | 1e69471d3eac6d0e2a01878ed3f0031783f57671 (diff) | |
download | portage-de2cbf6e28da9ebbcef7946186df042f28c09808.tar.gz portage-de2cbf6e28da9ebbcef7946186df042f28c09808.tar.bz2 portage-de2cbf6e28da9ebbcef7946186df042f28c09808.zip |
Add a PollScheduler._schedule_waitpid() method for SubProcess._wait()
to use as an alternative to hanging up the scheduler in a blocking
waitpid call.
Diffstat (limited to 'pym/_emerge/SubProcess.py')
-rw-r--r-- | pym/_emerge/SubProcess.py | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/pym/_emerge/SubProcess.py b/pym/_emerge/SubProcess.py index 9d75f0ea1..177ae3f92 100644 --- a/pym/_emerge/SubProcess.py +++ b/pym/_emerge/SubProcess.py @@ -81,14 +81,25 @@ class SubProcess(AbstractPollTask): return self.returncode try: - wait_retval = os.waitpid(self.pid, 0) + wait_retval = os.waitpid(self.pid, os.WNOHANG) except OSError as e: if e.errno != errno.ECHILD: raise del e self._set_returncode((self.pid, 1)) else: - self._set_returncode(wait_retval) + if wait_retval != (0, 0): + self._set_returncode(wait_retval) + else: + try: + wait_retval = self.scheduler.schedule_waitpid(self.pid) + except OSError as e: + if e.errno != errno.ECHILD: + raise + del e + self._set_returncode((self.pid, 1)) + else: + self._set_returncode(wait_retval) return self.returncode |