ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/event.c
(Generate patch)

Comparing libev/event.c (file contents):
Revision 1.18 by root, Tue Nov 6 13:17:55 2007 UTC vs.
Revision 1.22 by root, Thu Nov 8 21:20:51 2007 UTC

142} 142}
143 143
144static void 144static void
145x_cb_sig (EV_P_ struct ev_signal *w, int revents) 145x_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
150static void 155static void
151x_cb_io (EV_P_ struct ev_io *w, int revents) 156x_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
251void 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
244int event_pending (struct event *ev, short events, struct timeval *tv) 263int 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
330}; 349};
331 350
332static void 351static void
333x_once_cb (int revents, void *arg) 352x_once_cb (int revents, void *arg)
334{ 353{
335 struct x_once *once = arg; 354 struct x_once *once = (struct x_once *)arg;
336 355
337 once->cb (once->fd, revents, once->arg); 356 once->cb (once->fd, revents, once->arg);
338 free (once); 357 free (once);
339} 358}
340 359
341int event_base_once (struct event_base *base, int fd, short events, void (*cb)(int, short, void *), void *arg, struct timeval *tv) 360int event_base_once (struct event_base *base, int fd, short events, void (*cb)(int, short, void *), void *arg, struct timeval *tv)
342{ 361{
343 struct x_once *once = malloc (sizeof (struct x_once)); 362 struct x_once *once = (struct x_once *)malloc (sizeof (struct x_once));
344 dLOOPbase; 363 dLOOPbase;
345 364
346 if (!once) 365 if (!once)
347 return -1; 366 return -1;
348 367

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines