# HG changeset patch # User Tero Marttila # Date 1253998291 -10800 # Node ID 8c4032265c8c1daa33932a2bfb01ad7a7dc50ee0 # Parent 07ed878c847b2be5af99c909deeb90b6372a34f3 event keeps a ref to its event_base - needed for later error propagation, and to ensure method calls remain valid diff -r 07ed878c847b -r 8c4032265c8c qmsk/net/lib/event2/event.pxd --- a/qmsk/net/lib/event2/event.pxd Sat Sep 26 23:38:02 2009 +0300 +++ b/qmsk/net/lib/event2/event.pxd Sat Sep 26 23:51:31 2009 +0300 @@ -4,6 +4,8 @@ cimport qmsk.net.lib.event2.lib as lib +from qmsk.net.lib.event2.base cimport event_base + # internal helper method for handling timeout arguments cdef lib.timeval* build_timeout (lib.timeval *tv, object timeout = ?) except? -1 @@ -26,12 +28,12 @@ themselves while "active". In other words, .add() will aquire an internal reference, which will be released before the __call__(). - XXX: it might be better for refcounting if the event_base were to keep a reference to each event - XXX: or if we kept a reference to the event_base? Might be even better - XXX: propagate errors (including e.g. KeyboardInterrupt?) from __call__ to event_base.loop()? """ + # reference to our supporting event_base to ensure we don't lose it + cdef readonly event_base base + # the underlying event object cdef lib.event *ev diff -r 07ed878c847b -r 8c4032265c8c qmsk/net/lib/event2/event.pyx --- a/qmsk/net/lib/event2/event.pyx Sat Sep 26 23:38:02 2009 +0300 +++ b/qmsk/net/lib/event2/event.pyx Sat Sep 26 23:51:31 2009 +0300 @@ -45,6 +45,9 @@ cdef class event : def __init__ (self, event_base base not None, lib.evutil_socket_t fd, short events) : + # hold on to our event_base + self.base = base + # we don't hold a self-reference yet self.alive = False