mirror of https://github.com/python/cpython
#5910: fix kqueue for calls with more than one event.
This commit is contained in:
parent
b9ee881f8b
commit
d77faaf48f
|
@ -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)
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue