--- 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, <void *>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)
-