diff -r 9a55a2a1dc6f Modules/_io/fileio.c --- a/Modules/_io/fileio.c Tue Feb 17 23:36:19 2015 +0100 +++ b/Modules/_io/fileio.c Tue Mar 03 02:43:26 2015 +0100 @@ -218,7 +218,6 @@ fileio_init(PyObject *oself, PyObject *a #ifdef HAVE_FSTAT struct stat fdfstat; #endif - int async_err = 0; assert(PyFileIO_Check(oself)); if (self->fd >= 0) { @@ -371,8 +370,13 @@ fileio_init(PyObject *oself, PyObject *a self->fd = open(name, flags, 0666); Py_END_ALLOW_THREADS - } while (self->fd < 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); + + if (self->fd < 0 && errno == EINTR) { + if (PyErr_CheckSignals()) + goto error; + continue; + } + } while (0); } else { PyObject *fdobj; @@ -401,8 +405,7 @@ fileio_init(PyObject *oself, PyObject *a fd_is_own = 1; if (self->fd < 0) { - if (!async_err) - PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, nameobj); + PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, nameobj); goto error; } @@ -555,7 +558,7 @@ fileio_readinto(fileio *self, PyObject * { Py_buffer pbuf; Py_ssize_t n, len; - int err, async_err = 0; + int err; if (self->fd < 0) return err_closed(); @@ -578,8 +581,13 @@ fileio_readinto(fileio *self, PyObject * n = read(self->fd, pbuf.buf, len); #endif Py_END_ALLOW_THREADS - } while (n < 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); + + if (n < 0 && errno == EINTR) { + if (PyErr_CheckSignals()) + return NULL; + continue; + } + } while (0); } else n = -1; err = errno; @@ -588,8 +596,7 @@ fileio_readinto(fileio *self, PyObject * if (err == EAGAIN) Py_RETURN_NONE; errno = err; - if (!async_err) - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_IOError); return NULL; } @@ -636,7 +643,6 @@ fileio_readall(fileio *self) Py_ssize_t bytes_read = 0; Py_ssize_t n; size_t bufsize; - int async_err = 0; if (self->fd < 0) return err_closed(); @@ -695,8 +701,14 @@ fileio_readall(fileio *self) n = read(self->fd, PyBytes_AS_STRING(result) + bytes_read, n); #endif Py_END_ALLOW_THREADS - } while (n < 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); + + if (n < 0 && errno == EINTR) { + if (PyErr_CheckSignals()) + return NULL; + continue; + } + } while (0); + if (n == 0) break; if (n < 0) { @@ -707,8 +719,7 @@ fileio_readall(fileio *self) Py_RETURN_NONE; } Py_DECREF(result); - if (!async_err) - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_IOError); return NULL; } bytes_read += n; @@ -730,7 +741,6 @@ fileio_read(fileio *self, PyObject *args char *ptr; Py_ssize_t n; Py_ssize_t size = -1; - int async_err = 0; PyObject *bytes; if (self->fd < 0) @@ -764,8 +774,13 @@ fileio_read(fileio *self, PyObject *args n = read(self->fd, ptr, size); #endif Py_END_ALLOW_THREADS - } while (n < 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); + + if (n < 0 && errno == EINTR) { + if (PyErr_CheckSignals()) + return NULL; + continue; + } + } while (0); } else n = -1; @@ -775,8 +790,7 @@ fileio_read(fileio *self, PyObject *args if (err == EAGAIN) Py_RETURN_NONE; errno = err; - if (!async_err) - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_IOError); return NULL; } @@ -795,7 +809,7 @@ fileio_write(fileio *self, PyObject *arg { Py_buffer pbuf; Py_ssize_t n, len; - int err, async_err = 0; + int err; if (self->fd < 0) return err_closed(); @@ -824,8 +838,13 @@ fileio_write(fileio *self, PyObject *arg n = write(self->fd, pbuf.buf, len); #endif Py_END_ALLOW_THREADS - } while (n < 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); + + if (n < 0 && errno == EINTR) { + if (PyErr_CheckSignals()) + return NULL; + continue; + } + } while (0); } else n = -1; err = errno; @@ -836,8 +855,7 @@ fileio_write(fileio *self, PyObject *arg if (err == EAGAIN) Py_RETURN_NONE; errno = err; - if (!async_err) - PyErr_SetFromErrno(PyExc_IOError); + PyErr_SetFromErrno(PyExc_IOError); return NULL; }