summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-10-23 21:49:42 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2011-10-23 21:49:42 (GMT)
commit24d659daafd0e6c1514ee912f06f7b7310545e09 (patch)
treedfde423cd56334b8e85e8778b491f928d6a2c20b
parentdcbb822c08e75dbb45afe1c435af95961f22387a (diff)
downloadcpython-24d659daafd0e6c1514ee912f06f7b7310545e09.zip
cpython-24d659daafd0e6c1514ee912f06f7b7310545e09.tar.gz
cpython-24d659daafd0e6c1514ee912f06f7b7310545e09.tar.bz2
Use InterruptedError instead of checking for EINTR
-rw-r--r--Lib/_pyio.py17
-rw-r--r--Lib/asyncore.py13
-rw-r--r--Lib/multiprocessing/util.py9
-rw-r--r--Lib/socket.py8
-rw-r--r--Lib/subprocess.py6
-rw-r--r--Lib/test/test_socket.py2
6 files changed, 17 insertions, 38 deletions
diff --git a/Lib/_pyio.py b/Lib/_pyio.py
index 0611bd6..3bd35d2 100644
--- a/Lib/_pyio.py
+++ b/Lib/_pyio.py
@@ -14,7 +14,6 @@ except ImportError:
import io
from io import (__all__, SEEK_SET, SEEK_CUR, SEEK_END)
-from errno import EINTR
# open() uses st_blksize whenever we can
DEFAULT_BUFFER_SIZE = 8 * 1024 # bytes
@@ -948,9 +947,7 @@ class BufferedReader(_BufferedIOMixin):
# Read until EOF or until read() would block.
try:
chunk = self.raw.read()
- except IOError as e:
- if e.errno != EINTR:
- raise
+ except InterruptedError:
continue
if chunk in empty_values:
nodata_val = chunk
@@ -972,9 +969,7 @@ class BufferedReader(_BufferedIOMixin):
while avail < n:
try:
chunk = self.raw.read(wanted)
- except IOError as e:
- if e.errno != EINTR:
- raise
+ except InterruptedError:
continue
if chunk in empty_values:
nodata_val = chunk
@@ -1007,9 +1002,7 @@ class BufferedReader(_BufferedIOMixin):
while True:
try:
current = self.raw.read(to_read)
- except IOError as e:
- if e.errno != EINTR:
- raise
+ except InterruptedError:
continue
break
if current:
@@ -1120,9 +1113,7 @@ class BufferedWriter(_BufferedIOMixin):
while self._write_buf:
try:
n = self.raw.write(self._write_buf)
- except IOError as e:
- if e.errno != EINTR:
- raise
+ except InterruptedError:
continue
if n > len(self._write_buf) or n < 0:
raise IOError("write() returned incorrect number of bytes")
diff --git a/Lib/asyncore.py b/Lib/asyncore.py
index e699815..6d4bbbe 100644
--- a/Lib/asyncore.py
+++ b/Lib/asyncore.py
@@ -54,7 +54,7 @@ import warnings
import os
from errno import EALREADY, EINPROGRESS, EWOULDBLOCK, ECONNRESET, EINVAL, \
- ENOTCONN, ESHUTDOWN, EINTR, EISCONN, EBADF, ECONNABORTED, EPIPE, EAGAIN, \
+ ENOTCONN, ESHUTDOWN, EISCONN, EBADF, ECONNABORTED, EPIPE, EAGAIN, \
errorcode
_DISCONNECTED = frozenset((ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED, EPIPE,
@@ -143,11 +143,8 @@ def poll(timeout=0.0, map=None):
try:
r, w, e = select.select(r, w, e, timeout)
- except select.error as err:
- if err.args[0] != EINTR:
- raise
- else:
- return
+ except InterruptedError:
+ return
for fd in r:
obj = map.get(fd)
@@ -190,9 +187,7 @@ def poll2(timeout=0.0, map=None):
pollster.register(fd, flags)
try:
r = pollster.poll(timeout)
- except select.error as err:
- if err.args[0] != EINTR:
- raise
+ except InterruptedError:
r = []
for fd, flags in r:
obj = map.get(fd)
diff --git a/Lib/multiprocessing/util.py b/Lib/multiprocessing/util.py
index c487180..5c26683 100644
--- a/Lib/multiprocessing/util.py
+++ b/Lib/multiprocessing/util.py
@@ -327,15 +327,12 @@ class ForkAwareLocal(threading.local):
# Automatic retry after EINTR
#
-def _eintr_retry(func, _errors=(EnvironmentError, select.error)):
+def _eintr_retry(func):
@functools.wraps(func)
def wrapped(*args, **kwargs):
while True:
try:
return func(*args, **kwargs)
- except _errors as e:
- # select.error has no `errno` attribute
- if e.args[0] == errno.EINTR:
- continue
- raise
+ except InterruptedError:
+ continue
return wrapped
diff --git a/Lib/socket.py b/Lib/socket.py
index 5715034..b2954b5 100644
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -53,7 +53,6 @@ try:
except ImportError:
errno = None
EBADF = getattr(errno, 'EBADF', 9)
-EINTR = getattr(errno, 'EINTR', 4)
EAGAIN = getattr(errno, 'EAGAIN', 11)
EWOULDBLOCK = getattr(errno, 'EWOULDBLOCK', 11)
@@ -280,11 +279,10 @@ class SocketIO(io.RawIOBase):
except timeout:
self._timeout_occurred = True
raise
+ except InterruptedError:
+ continue
except error as e:
- n = e.args[0]
- if n == EINTR:
- continue
- if n in _blocking_errnos:
+ if e.args[0] in _blocking_errnos:
return None
raise
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index 2c5c888..a0aadb9 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -450,10 +450,8 @@ def _eintr_retry_call(func, *args):
while True:
try:
return func(*args)
- except (OSError, IOError) as e:
- if e.errno == errno.EINTR:
- continue
- raise
+ except InterruptedError:
+ continue
def call(*popenargs, timeout=None, **kwargs):
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 3d3dd0b..d7a521c 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -3584,7 +3584,7 @@ class FileObjectInterruptedTestCase(unittest.TestCase):
@staticmethod
def _raise_eintr():
- raise socket.error(errno.EINTR)
+ raise socket.error(errno.EINTR, "interrupted")
def _textiowrap_mock_socket(self, mock, buffering=-1):
raw = socket.SocketIO(mock, "r")