… | |
… | |
158 | static void |
158 | static void |
159 | x_cb_io (EV_P_ struct ev_io *w, int revents) |
159 | x_cb_io (EV_P_ struct ev_io *w, int revents) |
160 | { |
160 | { |
161 | struct event *ev = (struct event *)(((char *)w) - offsetof (struct event, iosig.io)); |
161 | struct event *ev = (struct event *)(((char *)w) - offsetof (struct event, iosig.io)); |
162 | |
162 | |
163 | if (revents & EV_ERROR) |
163 | if ((revents & EV_ERROR) || !(ev->ev_events & EV_PERSIST)) |
164 | event_del (ev); |
164 | event_del (ev); |
165 | else if (!(ev->ev_events & EV_PERSIST) && ev_is_active (w)) |
|
|
166 | { |
|
|
167 | ev_io_stop (EV_A_ w); |
|
|
168 | ev->ev_flags &= ~EVLIST_INSERTED; |
|
|
169 | } |
|
|
170 | |
165 | |
171 | x_cb (ev, revents); |
166 | x_cb (ev, revents); |
172 | } |
167 | } |
173 | |
168 | |
174 | static void |
169 | static void |
… | |
… | |
235 | ev->to.repeat = tv_get (tv); |
230 | ev->to.repeat = tv_get (tv); |
236 | ev_timer_again (EV_A_ &ev->to); |
231 | ev_timer_again (EV_A_ &ev->to); |
237 | ev->ev_flags |= EVLIST_TIMEOUT; |
232 | ev->ev_flags |= EVLIST_TIMEOUT; |
238 | } |
233 | } |
239 | else |
234 | else |
240 | if (ev_is_active (&ev->to)) |
235 | { |
241 | ev_timer_stop (EV_A_ &ev->to); |
236 | ev_timer_stop (EV_A_ &ev->to); |
|
|
237 | ev->ev_flags &= ~EVLIST_TIMEOUT; |
|
|
238 | } |
242 | |
239 | |
243 | ev->ev_flags |= EVLIST_ACTIVE; |
240 | ev->ev_flags |= EVLIST_ACTIVE; |
244 | |
241 | |
245 | return 0; |
242 | return 0; |
246 | } |
243 | } |
… | |
… | |
248 | int event_del (struct event *ev) |
245 | int event_del (struct event *ev) |
249 | { |
246 | { |
250 | dLOOPev; |
247 | dLOOPev; |
251 | |
248 | |
252 | if (ev->ev_events & EV_SIGNAL) |
249 | if (ev->ev_events & EV_SIGNAL) |
253 | { |
|
|
254 | /* sig */ |
|
|
255 | if (ev_is_active (&ev->iosig.sig)) |
|
|
256 | ev_signal_stop (EV_A_ &ev->iosig.sig); |
250 | ev_signal_stop (EV_A_ &ev->iosig.sig); |
257 | } |
|
|
258 | else if (ev->ev_events & (EV_READ | EV_WRITE)) |
251 | else if (ev->ev_events & (EV_READ | EV_WRITE)) |
259 | { |
|
|
260 | /* io */ |
|
|
261 | if (ev_is_active (&ev->iosig.io)) |
|
|
262 | ev_io_stop (EV_A_ &ev->iosig.io); |
252 | ev_io_stop (EV_A_ &ev->iosig.io); |
263 | } |
|
|
264 | |
253 | |
265 | if (ev_is_active (&ev->to)) |
254 | if (ev_is_active (&ev->to)) |
266 | ev_timer_stop (EV_A_ &ev->to); |
255 | ev_timer_stop (EV_A_ &ev->to); |
267 | |
256 | |
268 | ev->ev_flags = EVLIST_INIT; |
257 | ev->ev_flags = EVLIST_INIT; |