Author: Brian Kearns <[email protected]>
Branch: stdlib-2.7.6
Changeset: r69786:cf3d6a026601
Date: 2014-03-07 12:15 -0500
http://bitbucket.org/pypy/pypy/changeset/cf3d6a026601/
Log: fix signal_checker, use in streamio
diff --git a/pypy/module/_file/interp_file.py b/pypy/module/_file/interp_file.py
--- a/pypy/module/_file/interp_file.py
+++ b/pypy/module/_file/interp_file.py
@@ -111,13 +111,12 @@
# file lock. They don't convert StreamErrors to OperationErrors, too.
@unwrap_spec(mode=str, buffering=int)
- def direct___init__(self, space, w_name, mode='r', buffering=-1):
+ def direct___init__(self, w_name, mode='r', buffering=-1):
self.direct_close()
self.w_name = w_name
self.check_mode_ok(mode)
stream = dispatch_filename(streamio.open_file_as_stream)(
- self.space, w_name, mode, buffering,
- signal_checker(space))
+ self.space, w_name, mode, buffering, signal_checker(self.space))
fd = stream.try_to_find_file_descriptor()
self.check_not_dir(fd)
self.fdopenstream(stream, fd, mode)
@@ -136,7 +135,8 @@
self.direct_close()
self.w_name = self.space.wrap('<fdopen>')
self.check_mode_ok(mode)
- stream = streamio.fdopen_as_stream(fd, mode, buffering)
+ stream = streamio.fdopen_as_stream(fd, mode, buffering,
+ signal_checker(self.space))
self.fdopenstream(stream, fd, mode)
def direct_close(self):
@@ -581,7 +581,9 @@
@specialize.memo()
def signal_checker(space):
- return space.getexecutioncontext().checksignals
+ def checksignals():
+ space.getexecutioncontext().checksignals()
+ return checksignals
MAYBE_EAGAIN = getattr(errno, 'EAGAIN', None)
MAYBE_EWOULDBLOCK = getattr(errno, 'EWOULDBLOCK', None)
diff --git a/rpython/rlib/streamio.py b/rpython/rlib/streamio.py
--- a/rpython/rlib/streamio.py
+++ b/rpython/rlib/streamio.py
@@ -85,12 +85,12 @@
def _setfd_binary(fd):
pass
-def fdopen_as_stream(fd, mode, buffering=-1):
+def fdopen_as_stream(fd, mode, buffering=-1, signal_checker=None):
# XXX XXX XXX you want do check whether the modes are compatible
# otherwise you get funny results
os_flags, universal, reading, writing, basemode, binary = decode_mode(mode)
_setfd_binary(fd)
- stream = DiskFile(fd)
+ stream = DiskFile(fd, signal_checker)
return construct_stream_tower(stream, buffering, universal, reading,
writing, binary)
@@ -309,8 +309,9 @@
except OSError, e:
if e.errno != errno.EINTR:
raise
- else:
- continue # try again
+ if self.signal_checker is not None:
+ self.signal_checker()
+ continue # try again
if not c:
break
c = c[0]
@@ -326,6 +327,8 @@
except OSError, e:
if e.errno != errno.EINTR:
raise
+ if self.signal_checker is not None:
+ self.signal_checker()
else:
data = data[n:]
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit