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.23 by root, Thu Nov 8 23:53:41 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 dLOOPev;
254
255 if (res & EV_TIMEOUT)
256 ev_feed_event (EV_A_ &ev->to, res & EV_TIMEOUT);
257
258 if (res & EV_SIGNAL)
259 ev_feed_event (EV_A_ &ev->iosig.sig, res & EV_SIGNAL);
260
261 if (res & (EV_READ | EV_WRITE))
262 ev_feed_event (EV_A_ &ev->iosig.io, res & (EV_READ | EV_WRITE));
263}
264
244int event_pending (struct event *ev, short events, struct timeval *tv) 265int event_pending (struct event *ev, short events, struct timeval *tv)
245{ 266{
246 short revents = 0; 267 short revents = 0;
247 dLOOPev; 268 dLOOPev;
248 269
330}; 351};
331 352
332static void 353static void
333x_once_cb (int revents, void *arg) 354x_once_cb (int revents, void *arg)
334{ 355{
335 struct x_once *once = arg; 356 struct x_once *once = (struct x_once *)arg;
336 357
337 once->cb (once->fd, revents, once->arg); 358 once->cb (once->fd, revents, once->arg);
338 free (once); 359 free (once);
339} 360}
340 361
341int event_base_once (struct event_base *base, int fd, short events, void (*cb)(int, short, void *), void *arg, struct timeval *tv) 362int event_base_once (struct event_base *base, int fd, short events, void (*cb)(int, short, void *), void *arg, struct timeval *tv)
342{ 363{
343 struct x_once *once = malloc (sizeof (struct x_once)); 364 struct x_once *once = (struct x_once *)malloc (sizeof (struct x_once));
344 dLOOPbase; 365 dLOOPbase;
345 366
346 if (!once) 367 if (!once)
347 return -1; 368 return -1;
348 369

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines