diff -r 02f7c0539843 -r 0ff56f7216ee qmsk/net/lib/event2/event.pyx --- a/qmsk/net/lib/event2/event.pyx Mon Aug 31 21:36:15 2009 +0300 +++ b/qmsk/net/lib/event2/event.pyx Mon Aug 31 22:10:46 2009 +0300 @@ -39,7 +39,11 @@ cdef class event : - def __init__ (self, event_base base, lib.evutil_socket_t fd, short events) : + def __init__ (self, event_base base not None, lib.evutil_socket_t fd, short events) : + + # libevent seems to segfault otherwise... + if events & (lib.EV_READ | lib.EV_WRITE) and fd < 0 : + raise ValueError(fd) # construct event using our internal callback, with self as the arg self.ev = lib.event_new(base.ev_base, fd, events, ev_callback, self) @@ -48,7 +52,7 @@ raise Exception("event_new") - def assign (self, event_base base, lib.evutil_socket_t fd, short events) : + def assign (self, event_base base not None, lib.evutil_socket_t fd, short events) : """ Re-assign our event parameters to the given ones. @@ -98,10 +102,13 @@ lib.event_active(self.ev, fd, mask) - def pending (self, short mask) : + def pending (self, short mask = 0xffff) : """ Returns a bool indicating if this event is pending (that is, has been .add()'d). + For convenience, this defaults to testing all possible flags, and so will return true if any events are + pending. + XXX: support returning timeout value? """ @@ -138,6 +145,7 @@ XXX: what happens if event_base's __dealloc__ is triggered, but there are still event objects alive? """ + + if self.ev != NULL : + lib.event_free(self.ev) - lib.event_free(self.ev) -