]> granicus.if.org Git - python/commitdiff
Issue #23708: select.devpoll now retries its internal write() when interrupted
authorVictor Stinner <victor.stinner@gmail.com>
Thu, 19 Mar 2015 22:33:09 +0000 (23:33 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Thu, 19 Mar 2015 22:33:09 +0000 (23:33 +0100)
by a signal (EINTR).

Modify devpoll_flush() to use _Py_write() instead of calling directly write().

Modules/selectmodule.c

index ef53067ac4a5cf653a18ccc3574e6ccb50087421..a65af2ff347439513abf4bc83bef831c52d63a86 100644 (file)
@@ -718,14 +718,10 @@ static int devpoll_flush(devpollObject *self)
     size = sizeof(struct pollfd)*self->n_fds;
     self->n_fds = 0;
 
-    Py_BEGIN_ALLOW_THREADS
-    n = write(self->fd_devpoll, self->fds, size);
-    Py_END_ALLOW_THREADS
-
-    if (n == -1 ) {
-        PyErr_SetFromErrno(PyExc_IOError);
+    n = _Py_write(self->fd_devpoll, self->fds, size);
+    if (n == -1)
         return -1;
-    }
+
     if (n < size) {
         /*
         ** Data writed to /dev/poll is a binary data structure. It is not