mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
Fixes issue #14396: Handle the odd rare case of waitpid returning 0 when
not expected in subprocess.Popen.wait().
This commit is contained in:
parent
9463e3ac8b
commit
2ec82331b2
2 changed files with 9 additions and 2 deletions
|
@ -1428,7 +1428,7 @@ class Popen(object):
|
|||
def wait(self):
|
||||
"""Wait for child process to terminate. Returns returncode
|
||||
attribute."""
|
||||
if self.returncode is None:
|
||||
while self.returncode is None:
|
||||
try:
|
||||
pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0)
|
||||
except OSError as e:
|
||||
|
@ -1437,8 +1437,12 @@ class Popen(object):
|
|||
# This happens if SIGCLD is set to be ignored or waiting
|
||||
# for child processes has otherwise been disabled for our
|
||||
# process. This child is dead, we can't get the status.
|
||||
pid = self.pid
|
||||
sts = 0
|
||||
self._handle_exitstatus(sts)
|
||||
# Check the pid and loop as waitpid has been known to return
|
||||
# 0 even without WNOHANG in odd situations. issue14396.
|
||||
if pid == self.pid:
|
||||
self._handle_exitstatus(sts)
|
||||
return self.returncode
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue