diff options
author | Georg Brandl <georg@python.org> | 2009-07-16 07:18:07 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2009-07-16 07:18:07 (GMT) |
commit | d77faaf48f1469cb212937e37fcf8c3a35fa3c22 (patch) | |
tree | 43bbe32975fcda3b1c85e8e68a7e2c0be6fe32ed | |
parent | b9ee881f8bd92bc3aac4ae8072d148f3166770ec (diff) | |
download | cpython-d77faaf48f1469cb212937e37fcf8c3a35fa3c22.zip cpython-d77faaf48f1469cb212937e37fcf8c3a35fa3c22.tar.gz cpython-d77faaf48f1469cb212937e37fcf8c3a35fa3c22.tar.bz2 |
#5910: fix kqueue for calls with more than one event.
-rw-r--r-- | Lib/test/test_kqueue.py | 16 | ||||
-rw-r--r-- | Modules/selectmodule.c | 7 |
2 files changed, 20 insertions, 3 deletions
diff --git a/Lib/test/test_kqueue.py b/Lib/test/test_kqueue.py index 901295b..a0ab860 100644 --- a/Lib/test/test_kqueue.py +++ b/Lib/test/test_kqueue.py @@ -162,6 +162,22 @@ class TestKQueue(unittest.TestCase): server.close() serverSocket.close() + def testPair(self): + kq = select.kqueue() + a, b = socket.socketpair() + + a.send(b'foo') + event1 = select.kevent(a, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE) + event2 = select.kevent(b, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE) + r = kq.control([event1, event2], 1, 1) + self.assertTrue(r) + self.assertFalse(r[0].flags & select.KQ_EV_ERROR) + self.assertEquals(b.recv(r[0].data), b'foo') + + a.close() + b.close() + kq.close() + def test_main(): test_support.run_unittest(TestKQueue) diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index d8a68c5..c52a5f9 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -1487,7 +1487,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) if (nevents < 0) { PyErr_Format(PyExc_ValueError, "Length of eventlist must be 0 or positive, got %d", - nchanges); + nevents); return NULL; } @@ -1545,6 +1545,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) PyErr_NoMemory(); return NULL; } + i = 0; while ((ei = PyIter_Next(it)) != NULL) { if (!kqueue_event_Check(ei)) { Py_DECREF(ei); @@ -1553,7 +1554,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) "select.kevent objects"); goto error; } else { - chl[i] = ((kqueue_event_Object *)ei)->e; + chl[i++] = ((kqueue_event_Object *)ei)->e; } Py_DECREF(ei); } @@ -1584,7 +1585,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) goto error; } - for (i=0; i < gotevents; i++) { + for (i = 0; i < gotevents; i++) { kqueue_event_Object *ch; ch = PyObject_New(kqueue_event_Object, &kqueue_event_Type); |