qmsk/net/lib/event2/event.pyx
changeset 42 0ff56f7216ee
parent 41 02f7c0539843
child 47 b45a6648931c
--- 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)
-