summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/SubProcess.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-08-14 00:10:07 -0700
committerZac Medico <zmedico@gentoo.org>2010-08-14 00:10:07 -0700
commitde2cbf6e28da9ebbcef7946186df042f28c09808 (patch)
treeab7bfc95a2a024723e73b131d7d50788cd8b9c26 /pym/_emerge/SubProcess.py
parent1e69471d3eac6d0e2a01878ed3f0031783f57671 (diff)
downloadportage-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.py15
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