diff options
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 |