summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2010-04-06 21:50:00 (GMT)
committerBenjamin Peterson <benjamin@python.org>2010-04-06 21:50:00 (GMT)
commit3a1dfa21c297a263823033a45e3739d201dfddcf (patch)
tree4d6526d135f9809f4257937c2d04a68cf005b929
parent22c62dd345da5668a8adc86196569ce5df5d2831 (diff)
downloadcpython-3a1dfa21c297a263823033a45e3739d201dfddcf.zip
cpython-3a1dfa21c297a263823033a45e3739d201dfddcf.tar.gz
cpython-3a1dfa21c297a263823033a45e3739d201dfddcf.tar.bz2
remove a optimization that resulted in unexpected behavior #8929
-rw-r--r--Lib/test/test_select.py7
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/selectmodule.c8
3 files changed, 10 insertions, 8 deletions
diff --git a/Lib/test/test_select.py b/Lib/test/test_select.py
index fd7c8d0..647d71e 100644
--- a/Lib/test/test_select.py
+++ b/Lib/test/test_select.py
@@ -21,6 +21,13 @@ 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):
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')
diff --git a/Misc/NEWS b/Misc/NEWS
index 8b415be..7b82372 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.7 beta 1?
Core and Builtins
-----------------
+- Issue #8329: Don't return the same lists from select.select when no fds are
+ changed.
+
- Issue #8259: 1L << (2**31) no longer produces an 'outrageous shift error'
on 64-bit machines. The shift count for either left or right shift is
permitted to be up to sys.maxsize.
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index aae08d5..5f862d7 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -287,14 +287,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