[pypy-commit] pypy default: os.wait3() and os.wait4() need to raise OSError somewhere

arigo pypy.commits at gmail.com
Sat Dec 3 12:14:12 EST 2016


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r88857:034b40a26b6b
Date: 2016-12-03 18:13 +0100
http://bitbucket.org/pypy/pypy/changeset/034b40a26b6b/

Log:	os.wait3() and os.wait4() need to raise OSError somewhere

diff --git a/lib_pypy/_pypy_wait.py b/lib_pypy/_pypy_wait.py
--- a/lib_pypy/_pypy_wait.py
+++ b/lib_pypy/_pypy_wait.py
@@ -1,3 +1,4 @@
+import os
 from resource import ffi, lib, _make_struct_rusage
 
 __all__ = ["wait3", "wait4"]
@@ -7,6 +8,9 @@
     status = ffi.new("int *")
     ru = ffi.new("struct rusage *")
     pid = lib.wait3(status, options, ru)
+    if pid == -1:
+        errno = ffi.errno
+        raise OSError(errno, os.strerror(errno))
 
     rusage = _make_struct_rusage(ru)
 
@@ -16,6 +20,9 @@
     status = ffi.new("int *")
     ru = ffi.new("struct rusage *")
     pid = lib.wait4(pid, status, options, ru)
+    if pid == -1:
+        errno = ffi.errno
+        raise OSError(errno, os.strerror(errno))
 
     rusage = _make_struct_rusage(ru)
 
diff --git a/pypy/module/test_lib_pypy/test_os_wait.py b/pypy/module/test_lib_pypy/test_os_wait.py
--- a/pypy/module/test_lib_pypy/test_os_wait.py
+++ b/pypy/module/test_lib_pypy/test_os_wait.py
@@ -34,3 +34,7 @@
         assert os.WEXITSTATUS(status) == exit_status
         assert isinstance(rusage.ru_utime, float)
         assert isinstance(rusage.ru_maxrss, int)
+
+def test_errors():
+    py.test.raises(OSError, _pypy_wait.wait3, -999)
+    py.test.raises(OSError, _pypy_wait.wait4, -999, -999)


More information about the pypy-commit mailing list