diff options
-rw-r--r-- | Lib/_pyio.py | 17 | ||||
-rw-r--r-- | Lib/asyncore.py | 13 | ||||
-rw-r--r-- | Lib/multiprocessing/util.py | 9 | ||||
-rw-r--r-- | Lib/socket.py | 8 | ||||
-rw-r--r-- | Lib/subprocess.py | 6 | ||||
-rw-r--r-- | Lib/test/test_socket.py | 2 |
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") |