summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_select.py13
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/selectmodule.c8
3 files changed, 12 insertions, 12 deletions
diff --git a/Lib/test/test_select.py b/Lib/test/test_select.py
index a463868..8813c6e 100644
--- a/Lib/test/test_select.py
+++ b/Lib/test/test_select.py
@@ -4,6 +4,8 @@ import select
import os
import sys
+@unittest.skipIf(sys.platform[:3] in ('win', 'mac', 'os2', 'riscos'),
+ "can't easily test on this system")
class SelectTestCase(unittest.TestCase):
class Nope:
@@ -19,11 +21,14 @@ class SelectTestCase(unittest.TestCase):
self.assertRaises(TypeError, select.select, [self.Almost()], [], [])
self.assertRaises(TypeError, select.select, [], [], [], "not a number")
+ def test_returned_list_identity(self):
+ # See issue #8329
+ r, w, x = select.select([], [], [], 1)
+ self.assertIsNot(r, w)
+ self.assertIsNot(r, x)
+ self.assertIsNot(w, x)
+
def test_select(self):
- if sys.platform[:3] in ('win', 'mac', 'os2', 'riscos'):
- if support.verbose:
- print("Can't test select easily on", sys.platform)
- return
cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done'
p = os.popen(cmd, 'r')
for tout in (0, 1, 2, 4, 8, 16) + (None,)*10:
diff --git a/Misc/NEWS b/Misc/NEWS
index 6490360..b829138 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -15,6 +15,9 @@ Core and Builtins
- Issue #8014: Setting a T_UINT or T_PYSSIZET attribute of an object with
PyMemberDefs could produce an internal error; raise TypeError instead.
+- Issue #8329: Don't return the same lists from select.select when no fds are
+ changed.
+
- Raise a TypeError when trying to delete a T_STRING_INPLACE struct member.
- Issue #8226: sys.setfilesystemencoding() raises a LookupError if the encoding
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 7d5ea76..0fd3c48 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -284,14 +284,6 @@ select_select(PyObject *self, PyObject *args)
PyErr_SetFromErrno(SelectError);
}
#endif
- else if (n == 0) {
- /* optimization */
- ifdlist = PyList_New(0);
- if (ifdlist) {
- ret = PyTuple_Pack(3, ifdlist, ifdlist, ifdlist);
- Py_DECREF(ifdlist);
- }
- }
else {
/* any of these three calls can raise an exception. it's more
convenient to test for this after all three calls... but