… | |
… | |
142 | } |
142 | } |
143 | |
143 | |
144 | static void |
144 | static void |
145 | x_cb_sig (EV_P_ struct ev_signal *w, int revents) |
145 | x_cb_sig (EV_P_ struct ev_signal *w, int revents) |
146 | { |
146 | { |
147 | x_cb ((struct event *)(((char *)w) - offsetof (struct event, iosig.sig)), revents); |
147 | struct event *ev = (struct event *)(((char *)w) - offsetof (struct event, iosig.sig)); |
|
|
148 | |
|
|
149 | if (revents & EV_ERROR) |
|
|
150 | event_del (ev); |
|
|
151 | |
|
|
152 | x_cb (ev, revents); |
148 | } |
153 | } |
149 | |
154 | |
150 | static void |
155 | static void |
151 | x_cb_io (EV_P_ struct ev_io *w, int revents) |
156 | x_cb_io (EV_P_ struct ev_io *w, int revents) |
152 | { |
157 | { |
153 | struct event *ev = (struct event *)(((char *)w) - offsetof (struct event, iosig.io)); |
158 | struct event *ev = (struct event *)(((char *)w) - offsetof (struct event, iosig.io)); |
154 | |
159 | |
|
|
160 | if (revents & EV_ERROR) |
|
|
161 | event_del (ev); |
155 | if (!(ev->ev_events & EV_PERSIST) && ev_is_active (w)) |
162 | else if (!(ev->ev_events & EV_PERSIST) && ev_is_active (w)) |
156 | ev_io_stop (EV_A_ w); |
163 | ev_io_stop (EV_A_ w); |
157 | |
164 | |
158 | x_cb (ev, revents); |
165 | x_cb (ev, revents); |
159 | } |
166 | } |
160 | |
167 | |
… | |
… | |
239 | ev_timer_stop (EV_A_ &ev->to); |
246 | ev_timer_stop (EV_A_ &ev->to); |
240 | |
247 | |
241 | return 0; |
248 | return 0; |
242 | } |
249 | } |
243 | |
250 | |
|
|
251 | void event_active (struct event *ev, int res, short ncalls) |
|
|
252 | { |
|
|
253 | if (res & EV_TIMEOUT) |
|
|
254 | ev_feed_event (&ev->to, res & EV_TIMEOUT); |
|
|
255 | |
|
|
256 | if (res & EV_SIGNAL) |
|
|
257 | ev_feed_event (&ev->iosig.sig, res & EV_SIGNAL); |
|
|
258 | |
|
|
259 | if (res & (EV_READ | EV_WRITE)) |
|
|
260 | ev_feed_event (&ev->iosig.io, res & (EV_READ | EV_WRITE)); |
|
|
261 | } |
|
|
262 | |
244 | int event_pending (struct event *ev, short events, struct timeval *tv) |
263 | int event_pending (struct event *ev, short events, struct timeval *tv) |
245 | { |
264 | { |
246 | short revents = 0; |
265 | short revents = 0; |
247 | dLOOPev; |
266 | dLOOPev; |
248 | |
267 | |