summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2015-09-15 08:24:27 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2015-09-15 08:24:27 (GMT)
commit024364a89aee39e4d4f47b08ad93f262f5f97dc6 (patch)
tree6cd1cef11985af674801dc0384263b79a336e8a0
parent13e457c80819f118a5c531ecb94304d26c803e8e (diff)
parentd3ffd32767e1b05cc54e38e2d518b9b528ff8826 (diff)
downloadcpython-024364a89aee39e4d4f47b08ad93f262f5f97dc6.zip
cpython-024364a89aee39e4d4f47b08ad93f262f5f97dc6.tar.gz
cpython-024364a89aee39e4d4f47b08ad93f262f5f97dc6.tar.bz2
Merge 3.5 (os.waitpid)
-rw-r--r--Lib/test/test_os.py6
-rw-r--r--Misc/NEWS2
-rw-r--r--Modules/posixmodule.c4
3 files changed, 10 insertions, 2 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 70e9a31..b73b64b 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -2077,6 +2077,12 @@ class PidTests(unittest.TestCase):
# We are the parent of our subprocess
self.assertEqual(int(stdout), os.getpid())
+ def test_waitpid(self):
+ args = [sys.executable, '-c', 'pass']
+ pid = os.spawnv(os.P_NOWAIT, args[0], args)
+ status = os.waitpid(pid, 0)
+ self.assertEqual(status, (pid, 0))
+
# The introduction of this TestCase caused at least two different errors on
# *nix buildbots. Temporarily skip this to let the buildbots move along.
diff --git a/Misc/NEWS b/Misc/NEWS
index 9e3ae25..9089669 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -103,6 +103,8 @@ Core and Builtins
Library
-------
+- Issue #25118: Fix a regression of Python 3.5.0 in os.waitpid() on Windows.
+
- Issue #24684: socket.socket.getaddrinfo() now calls
PyUnicode_AsEncodedString() instead of calling the encode() method of the
host, to handle correctly custom string with an encode() method which doesn't
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index d2e2801..6654fbb 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -7021,7 +7021,7 @@ os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options)
res = _cwait(&status, pid, options);
Py_END_ALLOW_THREADS
} while (res < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
- if (res != 0)
+ if (res < 0)
return (!async_err) ? posix_error() : NULL;
/* shift the status left a byte so this is more like the POSIX waitpid */
@@ -7731,7 +7731,7 @@ os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode,
} while (fd < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
_Py_END_SUPPRESS_IPH
- if (fd == -1) {
+ if (fd < 0) {
if (!async_err)
PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path->object);
return -1;