cpython: 5194a84ed9f3 (original) (raw)

Mercurial > cpython

changeset 95308:5194a84ed9f3

Issue #23485: select.epoll.poll() is now retried when interrupted by a signal [#23485]

Victor Stinner victor.stinner@gmail.com
date Mon, 30 Mar 2015 21:59:21 +0200
parents 69b1683ee001
children a5cc958861e4
files Doc/library/select.rst Doc/whatsnew/3.5.rst Lib/selectors.py Lib/test/eintrdata/eintr_tester.py Modules/selectmodule.c
diffstat 5 files changed, 71 insertions(+), 23 deletions(-)[+] [-] Doc/library/select.rst 6 Doc/whatsnew/3.5.rst 2 Lib/selectors.py 6 Lib/test/eintrdata/eintr_tester.py 11 Modules/selectmodule.c 69

line wrap: on

line diff

--- a/Doc/library/select.rst +++ b/Doc/library/select.rst @@ -329,6 +329,12 @@ Edge and Level Trigger Polling (epoll) O Wait for events. timeout in seconds (float)

+ .. _poll-objects:

--- a/Doc/whatsnew/3.5.rst +++ b/Doc/whatsnew/3.5.rst @@ -621,7 +621,7 @@ Changes in the Python API

--- a/Lib/selectors.py +++ b/Lib/selectors.py @@ -423,11 +423,9 @@ if hasattr(select, 'epoll'): # FD is registered. max_ev = max(len(self._fd_to_key), 1)

+ ready = []

--- a/Lib/test/eintrdata/eintr_tester.py +++ b/Lib/test/eintrdata/eintr_tester.py @@ -329,6 +329,17 @@ class SelectEINTRTest(EINTRBaseTest): dt = time.monotonic() - t0 self.assertGreaterEqual(dt, self.sleep_time)

+

+ def test_main(): support.run_unittest(

--- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -535,7 +535,7 @@ poll_poll(pollObject *self, PyObject *ar if (timeout_obj == NULL || timeout_obj == Py_None) { timeout = -1; ms = -1;

@@ -1465,34 +1465,46 @@ fd is the target file descriptor of the static PyObject * pyepoll_poll(pyEpoll_Object *self, PyObject *args, PyObject *kwds) {

if (self->epfd < 0) return pyepoll_err_closed();

+

+

+

+

+

+ if (nfds < 0) { PyErr_SetFromErrno(PyExc_OSError); goto error;