remove a optimization that resulted in unexpected behavior #8929

This commit is contained in:
Benjamin Peterson 2010-04-06 21:50:00 +00:00
parent 22c62dd345
commit 3a1dfa21c2
3 changed files with 10 additions and 8 deletions

View file

@ -21,6 +21,13 @@ class SelectTestCase(unittest.TestCase):
self.assertRaises(TypeError, select.select, [self.Almost()], [], []) self.assertRaises(TypeError, select.select, [self.Almost()], [], [])
self.assertRaises(TypeError, select.select, [], [], [], "not a number") 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): def test_select(self):
cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' 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') p = os.popen(cmd, 'r')

View file

@ -12,6 +12,9 @@ What's New in Python 2.7 beta 1?
Core and Builtins 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' - 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 on 64-bit machines. The shift count for either left or right shift is
permitted to be up to sys.maxsize. permitted to be up to sys.maxsize.

View file

@ -287,14 +287,6 @@ select_select(PyObject *self, PyObject *args)
PyErr_SetFromErrno(SelectError); PyErr_SetFromErrno(SelectError);
} }
#endif #endif
else if (n == 0) {
/* optimization */
ifdlist = PyList_New(0);
if (ifdlist) {
ret = PyTuple_Pack(3, ifdlist, ifdlist, ifdlist);
Py_DECREF(ifdlist);
}
}
else { else {
/* any of these three calls can raise an exception. it's more /* any of these three calls can raise an exception. it's more
convenient to test for this after all three calls... but convenient to test for this after all three calls... but