Author: Armin Rigo <[email protected]>
Branch: py3.5-eintr-pep475
Changeset: r88871:63df1181a419
Date: 2016-12-04 10:19 +0100
http://bitbucket.org/pypy/pypy/changeset/63df1181a419/
Log: Add eintr_retry=False systematically (the goal would be to remove
the default value of the argument, to be sure we're complete)
diff --git a/pypy/module/posix/interp_posix.py
b/pypy/module/posix/interp_posix.py
--- a/pypy/module/posix/interp_posix.py
+++ b/pypy/module/posix/interp_posix.py
@@ -251,7 +251,7 @@
try:
pos = os.lseek(fd, position, how)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
return space.wrap(pos)
@@ -262,7 +262,7 @@
try:
res = os.isatty(fd)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
return space.wrap(res)
@@ -300,7 +300,7 @@
try:
os.close(fd)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(fd_low=c_int, fd_high=c_int)
def closerange(fd_low, fd_high):
@@ -487,7 +487,7 @@
raise oefmt(space.w_NotImplementedError,
"%s: unsupported argument combination", funcname)
except OSError as e:
- raise wrap_oserror2(space, e, path.w_path)
+ raise wrap_oserror2(space, e, path.w_path, eintr_retry=False)
else:
return build_stat_result(space, st)
@@ -546,7 +546,7 @@
rposix_stat.statvfs,
allow_fd_fn=rposix_stat.fstatvfs)(space, w_path)
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
else:
return build_statvfs_result(space, st)
@@ -558,17 +558,19 @@
try:
newfd = rposix.dup(fd, inheritable=False)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
return space.wrap(newfd)
@unwrap_spec(fd=c_int, fd2=c_int, inheritable=bool)
def dup2(space, fd, fd2, inheritable=1):
"""Duplicate a file descriptor."""
+ # like os.close(), this can still raise EINTR to app-level in
+ # CPython 3.5.2
try:
rposix.dup2(fd, fd2, inheritable)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(mode=c_int,
dir_fd=DirFD(rposix.HAVE_FACCESSAT), effective_ids=bool,
@@ -613,7 +615,7 @@
else:
ok = dispatch_filename(rposix.access)(space, w_path, mode)
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
else:
return space.wrap(ok)
@@ -627,7 +629,7 @@
try:
times = os.times()
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
return space.newtuple([space.wrap(times[0]),
space.wrap(times[1]),
@@ -641,7 +643,7 @@
try:
rc = os.system(command)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
return space.wrap(rc)
@@ -662,7 +664,7 @@
else:
dispatch_filename(rposix.unlink)(space, w_path)
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
@unwrap_spec(dir_fd=DirFD(rposix.HAVE_UNLINKAT))
def remove(space, w_path, __kwonly__, dir_fd=DEFAULT_DIR_FD):
@@ -681,7 +683,7 @@
else:
dispatch_filename(rposix.unlink)(space, w_path)
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
def _getfullpathname(space, w_path):
"""helper for ntpath.abspath """
@@ -695,7 +697,7 @@
fullpath = rposix.getfullpathname(path)
w_fullpath = space.newbytes(fullpath)
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
else:
return w_fullpath
@@ -704,7 +706,7 @@
try:
cur = os.getcwd()
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
return space.newbytes(cur)
@@ -714,7 +716,7 @@
try:
cur = os.getcwdu()
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
return space.wrap(cur)
else:
@@ -731,7 +733,7 @@
else:
dispatch_filename(rposix.chdir)(space, w_path)
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
@unwrap_spec(mode=c_int, dir_fd=DirFD(rposix.HAVE_MKDIRAT))
def mkdir(space, w_path, mode=0o777, __kwonly__=None, dir_fd=DEFAULT_DIR_FD):
@@ -752,7 +754,7 @@
else:
dispatch_filename(rposix.mkdir)(space, w_path, mode)
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
@unwrap_spec(dir_fd=DirFD(rposix.HAVE_UNLINKAT))
def rmdir(space, w_path, __kwonly__, dir_fd=DEFAULT_DIR_FD):
@@ -771,7 +773,7 @@
else:
dispatch_filename(rposix.rmdir)(space, w_path)
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
@unwrap_spec(code=c_int)
def strerror(space, code):
@@ -786,7 +788,7 @@
try:
cur = os.getlogin()
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.wrap_fsdecoded(cur)
# ____________________________________________________________
@@ -839,7 +841,7 @@
try:
rwin32._wputenv(name, value)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
def _convertenviron(space, w_env):
for key, value in os.environ.items():
@@ -850,7 +852,7 @@
try:
dispatch_filename_2(rposix.putenv)(space, w_name, w_value)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
def unsetenv(space, w_name):
"""Delete an environment variable."""
@@ -859,7 +861,7 @@
except KeyError:
pass
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
def listdir(space, w_path=None):
@@ -882,7 +884,7 @@
try:
result = rposix.listdir(dirname)
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
return space.newlist_bytes(result)
try:
path = space.fsencode_w(w_path)
@@ -896,13 +898,13 @@
try:
result = rposix.fdlistdir(os.dup(fd))
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
dirname = FileEncoder(space, w_path)
try:
result = rposix.listdir(dirname)
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
len_result = len(result)
result_w = [None] * len_result
for i in range(len_result):
@@ -917,14 +919,14 @@
try:
return space.wrap(rposix.get_inheritable(fd))
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(fd=c_int, inheritable=int)
def set_inheritable(space, fd, inheritable):
try:
rposix.set_inheritable(fd, inheritable)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
_pipe_inhcache = rposix.SetNonInheritableCache()
@@ -933,14 +935,14 @@
try:
fd1, fd2 = rposix.pipe(rposix.O_CLOEXEC or 0)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
try:
_pipe_inhcache.set_non_inheritable(fd1)
_pipe_inhcache.set_non_inheritable(fd2)
except OSError as e:
rposix.c_close(fd2)
rposix.c_close(fd1)
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.newtuple([space.wrap(fd1), space.wrap(fd2)])
@unwrap_spec(flags=c_int)
@@ -948,7 +950,7 @@
try:
fd1, fd2 = rposix.pipe2(flags)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.newtuple([space.wrap(fd1), space.wrap(fd2)])
@unwrap_spec(mode=c_int, dir_fd=DirFD(rposix.HAVE_FCHMODAT),
@@ -978,7 +980,7 @@
dispatch_filename(rposix.chmod)(space, w_path, mode)
return
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
try:
path = space.fsencode_w(w_path)
@@ -987,7 +989,12 @@
raise oefmt(space.w_TypeError,
"argument should be string, bytes or integer, not %T", w_path)
fd = unwrap_fd(space, w_path)
- _chmod_fd(space, fd, mode)
+ # NB. CPython 3.5.2: unclear why os.chmod(fd) propagates EINTR
+ # to app-level, but os.fchmod(fd) retries automatically
+ try:
+ os.fchmod(fd, mode)
+ except OSError as e:
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
try:
_chmod_path(path, mode, dir_fd, follow_symlinks)
@@ -996,7 +1003,7 @@
# fchmodat() doesn't actually implement follow_symlinks=False
# so raise NotImplementedError in this case
raise argument_unavailable(space, "chmod", "follow_symlinks")
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
def _chmod_path(path, mode, dir_fd, follow_symlinks):
if dir_fd != DEFAULT_DIR_FD or not follow_symlinks:
@@ -1004,7 +1011,13 @@
else:
rposix.chmod(path, mode)
-def _chmod_fd(space, fd, mode):
+@unwrap_spec(fd=c_int, mode=c_int)
+def fchmod(space, fd, mode):
+ """\
+ Change the access permissions of the file given by file descriptor fd.
+ """
+ # NB. CPython 3.5.2: unclear why os.chmod(fd) propagates EINTR
+ # to app-level, but os.fchmod(fd) retries automatically
while True:
try:
os.fchmod(fd, mode)
@@ -1012,14 +1025,6 @@
except OSError as e:
wrap_oserror(space, e, eintr_retry=True)
-
-@unwrap_spec(fd=c_int, mode=c_int)
-def fchmod(space, fd, mode):
- """\
- Change the access permissions of the file given by file descriptor fd.
- """
- _chmod_fd(space, fd, mode)
-
@unwrap_spec(src_dir_fd=DirFD(rposix.HAVE_RENAMEAT),
dst_dir_fd=DirFD(rposix.HAVE_RENAMEAT))
def rename(space, w_src, w_dst, __kwonly__,
@@ -1042,7 +1047,8 @@
else:
dispatch_filename_2(rposix.rename)(space, w_src, w_dst)
except OSError as e:
- raise wrap_oserror2(space, e, w_filename=w_src, w_filename2=w_dst)
+ raise wrap_oserror2(space, e, w_filename=w_src, w_filename2=w_dst,
+ eintr_retry=False)
@unwrap_spec(src_dir_fd=DirFD(rposix.HAVE_RENAMEAT),
dst_dir_fd=DirFD(rposix.HAVE_RENAMEAT))
@@ -1066,7 +1072,8 @@
else:
dispatch_filename_2(rposix.replace)(space, w_src, w_dst)
except OSError as e:
- raise wrap_oserror2(space, e, w_filename=w_src, w_filename2=w_dst)
+ raise wrap_oserror2(space, e, w_filename=w_src, w_filename2=w_dst,
+ eintr_retry=False)
@unwrap_spec(mode=c_int, dir_fd=DirFD(rposix.HAVE_MKFIFOAT))
def mkfifo(space, w_path, mode=0666, __kwonly__=None, dir_fd=DEFAULT_DIR_FD):
@@ -1078,6 +1085,8 @@
and path should be relative; path will then be relative to that directory.
dir_fd may not be implemented on your platform.
If it is unavailable, using it will raise a NotImplementedError."""
+ # CPython 3.5.2: why does os.mkfifo() retry automatically if it
+ # gets EINTR, but not os.mkdir()?
while True:
try:
if rposix.HAVE_MKFIFOAT and dir_fd != DEFAULT_DIR_FD:
@@ -1127,7 +1136,7 @@
try:
pid = os.getpid()
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.wrap(pid)
@unwrap_spec(pid=c_int, signal=c_int)
@@ -1136,7 +1145,7 @@
try:
rposix.kill(pid, signal)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(pgid=c_int, signal=c_int)
def killpg(space, pgid, signal):
@@ -1144,7 +1153,7 @@
try:
os.killpg(pgid, signal)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
def abort(space):
"""Abort the interpreter immediately. This 'dumps core' or otherwise fails
@@ -1182,7 +1191,8 @@
else:
rposix.link(src, dst)
except OSError as e:
- raise wrap_oserror(space, e, filename=src, filename2=dst)
+ raise wrap_oserror(space, e, filename=src, filename2=dst,
+ eintr_retry=False)
@unwrap_spec(dir_fd=DirFD(rposix.HAVE_SYMLINKAT))
@@ -1209,7 +1219,8 @@
else:
dispatch_filename_2(rposix.symlink)(space, w_src, w_dst)
except OSError as e:
- raise wrap_oserror2(space, e, w_filename=w_src, w_filename2=w_dst)
+ raise wrap_oserror2(space, e, w_filename=w_src, w_filename2=w_dst,
+ eintr_retry=False)
@unwrap_spec(
@@ -1230,7 +1241,7 @@
else:
result = call_rposix(rposix.readlink, path)
except OSError as e:
- raise wrap_oserror2(space, e, path.w_path)
+ raise wrap_oserror2(space, e, path.w_path, eintr_retry=False)
w_result = space.newbytes(result)
if space.isinstance_w(path.w_path, space.w_unicode):
return space.fsdecode(w_result)
@@ -1278,7 +1289,7 @@
except:
# Don't clobber the OSError if the fork failed
pass
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
if pid == 0:
run_fork_hooks('child', space)
else:
@@ -1296,7 +1307,7 @@
rposix.set_inheritable(master_fd, False)
rposix.set_inheritable(slave_fd, False)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.newtuple([space.wrap(master_fd), space.wrap(slave_fd)])
def forkpty(space):
@@ -1347,7 +1358,7 @@
try:
os.execv(command, args)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
def _env2interp(space, w_env):
@@ -1392,12 +1403,12 @@
try:
rposix.fexecve(fd, args, env)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
try:
os.execve(path, args, env)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(mode=int, path='fsencode')
def spawnv(space, mode, path, w_argv):
@@ -1405,7 +1416,7 @@
try:
ret = os.spawnv(mode, path, args)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.wrap(ret)
@unwrap_spec(mode=int, path='fsencode')
@@ -1415,7 +1426,7 @@
try:
ret = os.spawnve(mode, path, args, env)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.wrap(ret)
@@ -1523,7 +1534,7 @@
# something is wrong with the file, when it also
# could be the time stamp that gives a problem. */
# so we use wrap_oserror() instead of wrap_oserror2() here
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@specialize.arg(1)
def do_utimes(space, func, arg, utime):
@@ -1540,7 +1551,7 @@
func(arg, (atime, mtime))
except OSError as e:
# see comment above: don't use wrap_oserror2()
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@specialize.argtype(1)
def _dispatch_utime(path, times):
@@ -1583,7 +1594,7 @@
try:
r = os.uname()
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
l_w = [space.wrap_fsdecoded(i)
for i in [r[0], r[1], r[2], r[3], r[4]]]
w_tuple = space.newtuple(l_w)
@@ -1607,7 +1618,7 @@
try:
os.setuid(uid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(euid=c_uid_t)
def seteuid(space, euid):
@@ -1618,7 +1629,7 @@
try:
os.seteuid(euid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(gid=c_gid_t)
def setgid(space, gid):
@@ -1629,7 +1640,7 @@
try:
os.setgid(gid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(egid=c_gid_t)
def setegid(space, egid):
@@ -1640,7 +1651,7 @@
try:
os.setegid(egid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(path='fsencode')
def chroot(space, path):
@@ -1651,7 +1662,7 @@
try:
os.chroot(path)
except OSError as e:
- raise wrap_oserror(space, e, path)
+ raise wrap_oserror(space, e, path, eintr_retry=False)
return space.w_None
def getgid(space):
@@ -1683,7 +1694,7 @@
try:
list = os.getgroups()
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.newlist([wrap_gid(space, e) for e in list])
def setgroups(space, w_groups):
@@ -1697,7 +1708,7 @@
try:
os.setgroups(list[:])
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(username=str, gid=c_gid_t)
def initgroups(space, username, gid):
@@ -1710,7 +1721,7 @@
try:
os.initgroups(username, gid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
def getpgrp(space):
""" getpgrp() -> pgrp
@@ -1727,7 +1738,7 @@
try:
os.setpgrp()
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.w_None
def getppid(space):
@@ -1746,7 +1757,7 @@
try:
pgid = os.getpgid(pid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.wrap(pgid)
@unwrap_spec(pid=c_int, pgrp=c_int)
@@ -1758,7 +1769,7 @@
try:
os.setpgid(pid, pgrp)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.w_None
@unwrap_spec(ruid=c_uid_t, euid=c_uid_t)
@@ -1770,7 +1781,7 @@
try:
os.setreuid(ruid, euid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(rgid=c_gid_t, egid=c_gid_t)
def setregid(space, rgid, egid):
@@ -1781,7 +1792,7 @@
try:
os.setregid(rgid, egid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(pid=c_int)
def getsid(space, pid):
@@ -1792,7 +1803,7 @@
try:
sid = os.getsid(pid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.wrap(sid)
def setsid(space):
@@ -1803,7 +1814,7 @@
try:
os.setsid()
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.w_None
@unwrap_spec(fd=c_int)
@@ -1815,7 +1826,7 @@
try:
pgid = os.tcgetpgrp(fd)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.wrap(pgid)
@unwrap_spec(fd=c_int, pgid=c_gid_t)
@@ -1827,7 +1838,7 @@
try:
os.tcsetpgrp(fd, pgid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
def getresuid(space):
""" getresuid() -> (ruid, euid, suid)
@@ -1837,7 +1848,7 @@
try:
(ruid, euid, suid) = os.getresuid()
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.newtuple([wrap_uid(space, ruid),
wrap_uid(space, euid),
wrap_uid(space, suid)])
@@ -1850,7 +1861,7 @@
try:
(rgid, egid, sgid) = os.getresgid()
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.newtuple([wrap_gid(space, rgid),
wrap_gid(space, egid),
wrap_gid(space, sgid)])
@@ -1864,7 +1875,7 @@
try:
os.setresuid(ruid, euid, suid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
@unwrap_spec(rgid=c_gid_t, egid=c_gid_t, sgid=c_gid_t)
def setresgid(space, rgid, egid, sgid):
@@ -1875,7 +1886,7 @@
try:
os.setresgid(rgid, egid, sgid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
def declare_new_w_star(name):
if name in ('WEXITSTATUS', 'WSTOPSIG', 'WTERMSIG'):
@@ -1901,7 +1912,7 @@
try:
return space.wrap_fsdecoded(os.ttyname(fd))
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
def confname_w(space, w_name, namespace):
@@ -1920,7 +1931,7 @@
try:
res = os.sysconf(num)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.wrap(res)
@unwrap_spec(fd=c_int)
@@ -1929,7 +1940,7 @@
try:
res = os.fpathconf(fd, num)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.wrap(res)
@unwrap_spec(path=path_or_fd(allow_fd=hasattr(os, 'fpathconf')))
@@ -1939,12 +1950,12 @@
try:
res = os.fpathconf(path.as_fd, num)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
try:
res = os.pathconf(path.as_bytes, num)
except OSError as e:
- raise wrap_oserror2(space, e, path.w_path)
+ raise wrap_oserror2(space, e, path.w_path, eintr_retry=False)
return space.wrap(res)
def confstr(space, w_name):
@@ -1952,7 +1963,7 @@
try:
res = os.confstr(num)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.wrap(res)
@unwrap_spec(
@@ -1996,7 +2007,7 @@
try:
os.fchown(fd, uid, gid)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
else:
# String case
try:
@@ -2011,7 +2022,7 @@
assert dir_fd == DEFAULT_DIR_FD
os.chown(path, uid, gid)
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
@unwrap_spec(path='fsencode', uid=c_uid_t, gid=c_gid_t)
@@ -2024,7 +2035,7 @@
try:
os.lchown(path, uid, gid)
except OSError as e:
- raise wrap_oserror(space, e, path)
+ raise wrap_oserror(space, e, path, eintr_retry=False)
@unwrap_spec(uid=c_uid_t, gid=c_gid_t)
def fchown(space, w_fd, uid, gid):
@@ -2032,6 +2043,7 @@
Change the owner and group id of the file given by file descriptor
fd to the numeric uid and gid. Equivalent to os.chown(fd, uid, gid)."""
+ # same comment than about os.chmod(fd) vs. os.fchmod(fd)
fd = space.c_filedescriptor_w(w_fd)
while True:
try:
@@ -2071,7 +2083,7 @@
try:
res = os.nice(increment)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.wrap(res)
@unwrap_spec(size=int)
@@ -2084,7 +2096,9 @@
try:
return space.newbytes(rurandom.urandom(context, size))
except OSError as e:
- raise wrap_oserror(space, e)
+ # 'rurandom' should catch and retry internally if it gets EINTR
+ # (at least in os.read(), which is probably enough in practice)
+ raise wrap_oserror(space, e, eintr_retry=False)
def ctermid(space):
"""ctermid() -> string
@@ -2122,7 +2136,7 @@
try:
info = nt._getfileinformation(fd)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.newtuple([space.wrap(info[0]),
space.wrap(info[1]),
space.wrap(info[2])])
@@ -2135,7 +2149,7 @@
raise OperationError(space.w_NotImplementedError,
space.wrap(e.msg))
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
return space.wrap(result)
@@ -2267,7 +2281,7 @@
try:
flags = rposix.get_status_flags(fd)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
return space.newbool(flags & rposix.O_NONBLOCK == 0)
@unwrap_spec(fd=c_int, blocking=int)
@@ -2280,4 +2294,4 @@
flags |= rposix.O_NONBLOCK
rposix.set_status_flags(fd, flags)
except OSError as e:
- raise wrap_oserror(space, e)
+ raise wrap_oserror(space, e, eintr_retry=False)
diff --git a/pypy/module/posix/interp_scandir.py
b/pypy/module/posix/interp_scandir.py
--- a/pypy/module/posix/interp_scandir.py
+++ b/pypy/module/posix/interp_scandir.py
@@ -28,7 +28,7 @@
try:
dirp = rposix_scandir.opendir(path_bytes)
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror2(space, e, w_path, eintr_retry=False)
path_prefix = path_bytes
if len(path_prefix) > 0 and path_prefix[-1] != '/':
path_prefix += '/'
@@ -85,7 +85,8 @@
try:
entry = rposix_scandir.nextentry(self.dirp)
except OSError as e:
- raise self.fail(wrap_oserror2(space, e,
self.w_path_prefix))
+ raise self.fail(wrap_oserror2(space, e, self.w_path_prefix,
+ eintr_retry=False))
if not entry:
raise self.fail()
assert rposix_scandir.has_name_bytes(entry)
@@ -235,7 +236,8 @@
except OSError as e:
if e.errno == ENOENT: # not found
return -1
- raise wrap_oserror2(self.space, e, self.fget_path(self.space))
+ raise wrap_oserror2(self.space, e, self.fget_path(self.space),
+ eintr_retry=False)
return stat.S_IFMT(st.st_mode)
def is_dir(self, follow_symlinks):
@@ -287,7 +289,8 @@
try:
st = self.get_stat_or_lstat(follow_symlinks)
except OSError as e:
- raise wrap_oserror2(space, e, self.fget_path(space))
+ raise wrap_oserror2(space, e, self.fget_path(space),
+ eintr_retry=False)
return build_stat_result(space, st)
def descr_inode(self, space):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit