diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2015-09-15 08:24:27 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2015-09-15 08:24:27 (GMT) |
commit | 024364a89aee39e4d4f47b08ad93f262f5f97dc6 (patch) | |
tree | 6cd1cef11985af674801dc0384263b79a336e8a0 | |
parent | 13e457c80819f118a5c531ecb94304d26c803e8e (diff) | |
parent | d3ffd32767e1b05cc54e38e2d518b9b528ff8826 (diff) | |
download | cpython-024364a89aee39e4d4f47b08ad93f262f5f97dc6.zip cpython-024364a89aee39e4d4f47b08ad93f262f5f97dc6.tar.gz cpython-024364a89aee39e4d4f47b08ad93f262f5f97dc6.tar.bz2 |
Merge 3.5 (os.waitpid)
-rw-r--r-- | Lib/test/test_os.py | 6 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Modules/posixmodule.c | 4 |
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. @@ -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; |