Commit 2ec82331 authored by Gregory P. Smith's avatar Gregory P. Smith

Fixes issue #14396: Handle the odd rare case of waitpid returning 0 when

not expected in subprocess.Popen.wait().
parent 9463e3ac
...@@ -1428,7 +1428,7 @@ class Popen(object): ...@@ -1428,7 +1428,7 @@ class Popen(object):
def wait(self): def wait(self):
"""Wait for child process to terminate. Returns returncode """Wait for child process to terminate. Returns returncode
attribute.""" attribute."""
if self.returncode is None: while self.returncode is None:
try: try:
pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0) pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0)
except OSError as e: except OSError as e:
...@@ -1437,7 +1437,11 @@ class Popen(object): ...@@ -1437,7 +1437,11 @@ class Popen(object):
# This happens if SIGCLD is set to be ignored or waiting # This happens if SIGCLD is set to be ignored or waiting
# for child processes has otherwise been disabled for our # for child processes has otherwise been disabled for our
# process. This child is dead, we can't get the status. # process. This child is dead, we can't get the status.
pid = self.pid
sts = 0 sts = 0
# 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) self._handle_exitstatus(sts)
return self.returncode return self.returncode
......
...@@ -10,6 +10,9 @@ What's New in Python 3.2.4 ...@@ -10,6 +10,9 @@ What's New in Python 3.2.4
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #14396: Handle the odd rare case of waitpid returning 0 when not
expected in subprocess.Popen.wait().
- Issue #9535: Fix pending signals that have been received but not yet - Issue #9535: Fix pending signals that have been received but not yet
handled by Python to not persist after os.fork() in the child process. handled by Python to not persist after os.fork() in the child process.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment