diff --git a/Lib/test/test_select.py b/Lib/test/test_select.py index cf32cf2f6a6f8b..69421fd77558d0 100644 --- a/Lib/test/test_select.py +++ b/Lib/test/test_select.py @@ -46,7 +46,7 @@ def test_returned_list_identity(self): self.assertIsNot(r, x) self.assertIsNot(w, x) - @unittest.skipUnless(hasattr(os, 'popen'), "need os.popen()") + @support.requires_fork() def test_select(self): code = textwrap.dedent(''' import time diff --git a/Misc/NEWS.d/next/Library/2022-03-14-09-26-42.bpo-40280.2-k8TV.rst b/Misc/NEWS.d/next/Library/2022-03-14-09-26-42.bpo-40280.2-k8TV.rst new file mode 100644 index 00000000000000..f27c968623ff52 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-03-14-09-26-42.bpo-40280.2-k8TV.rst @@ -0,0 +1 @@ +:func:`select.select` now passes ``NULL`` to ``select`` for each empty fdset. diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index 1a5a63249c7b8a..5c36eaaedeb70b 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -330,7 +330,12 @@ select_select_impl(PyObject *module, PyObject *rlist, PyObject *wlist, do { Py_BEGIN_ALLOW_THREADS errno = 0; - n = select(max, &ifdset, &ofdset, &efdset, tvp); + n = select( + max, + imax ? &ifdset : NULL, + omax ? &ofdset : NULL, + emax ? &efdset : NULL, + tvp); Py_END_ALLOW_THREADS if (errno != EINTR)