bpo-35310: Clear select() lists before returning upon EINTR (GH-10877)
select() calls are retried on EINTR (per PEP 475). However, if a timeout was provided and the deadline has passed after running the signal handlers, rlist, wlist and xlist should be cleared since select(2) left them unmodified.
This commit is contained in:
parent
67a93b3a0b
commit
7f52415a6d
|
@ -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.
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue