From 54799672dad9e6a10adde0f4af87d9f8165e4d7a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 19 Mar 2015 23:33:09 +0100 Subject: [PATCH] Issue #23708: select.devpoll now retries its internal write() when interrupted by a signal (EINTR). Modify devpoll_flush() to use _Py_write() instead of calling directly write(). --- Modules/selectmodule.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index ef53067ac4a..a65af2ff347 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -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