diff options
author | Christian Heimes <christian@python.org> | 2022-03-14 13:40:28 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-14 13:40:28 (GMT) |
commit | f00ced8396f2d7683e58b9d5ebbf5797992bf477 (patch) | |
tree | e1c82c567bab35043f594f54f756a0b0432ddd89 | |
parent | 23abae621f579014eb29d5c6621f031c8a1a4057 (diff) | |
download | cpython-f00ced8396f2d7683e58b9d5ebbf5797992bf477.zip cpython-f00ced8396f2d7683e58b9d5ebbf5797992bf477.tar.gz cpython-f00ced8396f2d7683e58b9d5ebbf5797992bf477.tar.bz2 |
bpo-40280: select: Use NULL for empty fdset (GH-31865)
wasm32-emscripten does not support exceptfds and requires NULL. Python
now passes NULL instead of a fdset pointer when the input list is empty.
This works fine on all platforms and might even be a tiny bit faster.
-rw-r--r-- | Lib/test/test_select.py | 2 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2022-03-14-09-26-42.bpo-40280.2-k8TV.rst | 1 | ||||
-rw-r--r-- | Modules/selectmodule.c | 7 |
3 files changed, 8 insertions, 2 deletions
diff --git a/Lib/test/test_select.py b/Lib/test/test_select.py index cf32cf2..69421fd 100644 --- a/Lib/test/test_select.py +++ b/Lib/test/test_select.py @@ -46,7 +46,7 @@ class SelectTestCase(unittest.TestCase): 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 0000000..f27c968 --- /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 1a5a632..5c36eaa 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) |