Kaydet (Commit) d77faaf4 authored tarafından Georg Brandl's avatar Georg Brandl

#5910: fix kqueue for calls with more than one event.

üst b9ee881f
...@@ -162,6 +162,22 @@ class TestKQueue(unittest.TestCase): ...@@ -162,6 +162,22 @@ class TestKQueue(unittest.TestCase):
server.close() server.close()
serverSocket.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(): def test_main():
test_support.run_unittest(TestKQueue) test_support.run_unittest(TestKQueue)
......
...@@ -1487,7 +1487,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) ...@@ -1487,7 +1487,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
if (nevents < 0) { if (nevents < 0) {
PyErr_Format(PyExc_ValueError, PyErr_Format(PyExc_ValueError,
"Length of eventlist must be 0 or positive, got %d", "Length of eventlist must be 0 or positive, got %d",
nchanges); nevents);
return NULL; return NULL;
} }
...@@ -1545,6 +1545,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) ...@@ -1545,6 +1545,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
PyErr_NoMemory(); PyErr_NoMemory();
return NULL; return NULL;
} }
i = 0;
while ((ei = PyIter_Next(it)) != NULL) { while ((ei = PyIter_Next(it)) != NULL) {
if (!kqueue_event_Check(ei)) { if (!kqueue_event_Check(ei)) {
Py_DECREF(ei); Py_DECREF(ei);
...@@ -1553,7 +1554,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) ...@@ -1553,7 +1554,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
"select.kevent objects"); "select.kevent objects");
goto error; goto error;
} else { } else {
chl[i] = ((kqueue_event_Object *)ei)->e; chl[i++] = ((kqueue_event_Object *)ei)->e;
} }
Py_DECREF(ei); Py_DECREF(ei);
} }
...@@ -1584,7 +1585,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) ...@@ -1584,7 +1585,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
goto error; goto error;
} }
for (i=0; i < gotevents; i++) { for (i = 0; i < gotevents; i++) {
kqueue_event_Object *ch; kqueue_event_Object *ch;
ch = PyObject_New(kqueue_event_Object, &kqueue_event_Type); ch = PyObject_New(kqueue_event_Object, &kqueue_event_Type);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment