summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS.d/next/Library/2018-12-03-19-45-00.bpo-35310.9k28gR.rst4
-rw-r--r--Modules/selectmodule.c4
2 files changed, 8 insertions, 0 deletions
diff --git a/Misc/NEWS.d/next/Library/2018-12-03-19-45-00.bpo-35310.9k28gR.rst b/Misc/NEWS.d/next/Library/2018-12-03-19-45-00.bpo-35310.9k28gR.rst
new file mode 100644
index 0000000000..1ab2e168c8
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-12-03-19-45-00.bpo-35310.9k28gR.rst
@@ -0,0 +1,4 @@
+Fix a bug in :func:`select.select` where, in some cases, the file descriptor
+sequences were returned unmodified after a signal interruption, even though the
+file descriptors might not be ready yet. :func:`select.select` will now always
+return empty lists if a timeout has occurred. Patch by Oran Avraham.
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 5a6b13466c..fe69cd58dc 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -335,6 +335,10 @@ select_select_impl(PyObject *module, PyObject *rlist, PyObject *wlist,
if (tvp) {
timeout = deadline - _PyTime_GetMonotonicClock();
if (timeout < 0) {
+ /* bpo-35310: lists were unmodified -- clear them explicitly */
+ FD_ZERO(&ifdset);
+ FD_ZERO(&ofdset);
+ FD_ZERO(&efdset);
n = 0;
break;
}