]>
Commit | Line | Data |
---|---|---|
4d591ea2 JR |
1 | diff -ur pyevent-0.3/event.pyx pyevent-0.3-libevent-2.1/event.pyx |
2 | --- pyevent-0.3/event.pyx 2017-04-04 19:11:05.337824387 +0200 | |
3 | +++ pyevent-0.3-libevent-2.1/event.pyx 2017-04-04 19:20:30.738730651 +0200 | |
4 | @@ -36,9 +36,12 @@ | |
5 | unsigned int tv_sec | |
6 | unsigned int tv_usec | |
7 | ||
8 | + struct event_callback_t "event_callback": | |
9 | + short evcb_flags | |
10 | + | |
11 | struct event_t "event": | |
12 | + event_callback_t ev_evcallback | |
13 | int ev_fd | |
14 | - int ev_flags | |
15 | void *ev_arg | |
16 | ||
17 | void event_init() | |
18 | @@ -52,6 +52,7 @@ | |
19 | int event_del(event_t *ev) | |
20 | int event_dispatch() | |
21 | int event_loop(int loop) | |
22 | + int event_loopbreak() | |
23 | int event_pending(event_t *ev, short, timeval *tv) | |
24 | ||
25 | int EVLOOP_ONCE | |
26 | @@ -65,9 +66,6 @@ | |
27 | ||
28 | __event_exc = None | |
29 | ||
30 | -cdef int __event_sigcb(): | |
31 | - return -1 | |
32 | - | |
33 | cdef void __event_handler(int fd, short evtype, void *arg): | |
34 | (<object>arg).__callback(evtype) | |
35 | ||
36 | @@ -112,8 +110,6 @@ | |
37 | event_set(&self.ev, handle, evtype, handler, <void *>self) | |
38 | ||
39 | def __simple_callback(self, short evtype): | |
40 | - cdef extern int event_gotsig | |
41 | - cdef extern int (*event_sigcb)() | |
42 | global __event_exc | |
43 | try: | |
44 | if self.callback(*self.args) != None: | |
45 | @@ -122,24 +118,20 @@ | |
46 | else: | |
47 | event_add(&self.ev, NULL) | |
48 | except: | |
49 | + event_loopbreak() | |
50 | __event_exc = sys.exc_info() | |
51 | - event_sigcb = __event_sigcb | |
52 | - event_gotsig = 1 | |
53 | # XXX - account for event.signal() EV_PERSIST | |
54 | if not (evtype & EV_SIGNAL) and \ | |
55 | not event_pending(&self.ev, EV_READ|EV_WRITE|EV_SIGNAL|EV_TIMEOUT, NULL): | |
56 | Py_DECREF(self) | |
57 | ||
58 | def __callback(self, short evtype): | |
59 | - cdef extern int event_gotsig | |
60 | - cdef extern int (*event_sigcb)() | |
61 | global __event_exc | |
62 | try: | |
63 | self.callback(self, self.handle, evtype, self.args) | |
64 | except: | |
65 | + event_loopbreak() | |
66 | __event_exc = sys.exc_info() | |
67 | - event_sigcb = __event_sigcb | |
68 | - event_gotsig = 1 | |
69 | if not event_pending(&self.ev, EV_READ|EV_WRITE|EV_SIGNAL|EV_TIMEOUT, NULL): | |
70 | Py_DECREF(self) | |
71 | ||
72 | @@ -153,7 +156,7 @@ | |
73 | self.timeout = timeout | |
74 | if timeout >= 0.0: | |
75 | self.tv.tv_sec = <long>timeout | |
76 | - self.tv.tv_usec = (timeout - <float>self.tv.tv_sec) * 1000000.0 | |
77 | + self.tv.tv_usec = <long>((timeout - <float>self.tv.tv_sec) * 1000000.0) | |
78 | event_add(&self.ev, &self.tv) | |
79 | else: | |
80 | self.tv.tv_sec = self.tv.tv_usec = 0 | |
81 | @@ -174,7 +177,7 @@ | |
82 | ||
83 | def __repr__(self): | |
84 | return '<event flags=0x%x, handle=%s, callback=%s, arg=%s>' % \ | |
85 | - (self.ev.ev_flags, self.handle, self.callback, self.args) | |
86 | + (self.ev.ev_evcallback.evcb_flags, self.handle, self.callback, self.args) | |
87 | ||
88 | cdef class read(event): | |
89 | """read(handle, callback, *args) -> event object | |
90 | @@ -266,10 +266,7 @@ | |
91 | ||
92 | def abort(): | |
93 | """Abort event dispatch loop.""" | |
94 | - cdef extern int event_gotsig | |
95 | - cdef extern int (*event_sigcb)() | |
96 | - event_sigcb = __event_sigcb | |
97 | - event_gotsig = 1 | |
98 | + event_loopbreak() | |
99 | ||
100 | # XXX - make sure event queue is always initialized. | |
101 | init() |