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

Comparing libev/event.c (file contents):
Revision 1.26 by root, Mon Nov 12 00:31:08 2007 UTC vs.
Revision 1.27 by root, Mon Nov 12 01:11:36 2007 UTC

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)
164 event_del (ev); 164 event_del (ev);
165 else if (!(ev->ev_events & EV_PERSIST) && ev_is_active (w)) 165 else if (!(ev->ev_events & EV_PERSIST) && ev_is_active (w))
166 {
166 ev_io_stop (EV_A_ w); 167 ev_io_stop (EV_A_ w);
168 ev->ev_flags &= ~EVLIST_INSERTED;
169 }
167 170
168 x_cb (ev, revents); 171 x_cb (ev, revents);
169} 172}
170 173
171static void 174static void
192 ev->ev_events = events; 195 ev->ev_events = events;
193 ev->ev_pri = 0; 196 ev->ev_pri = 0;
194 ev->ev_callback = cb; 197 ev->ev_callback = cb;
195 ev->ev_arg = arg; 198 ev->ev_arg = arg;
196 ev->ev_res = 0; 199 ev->ev_res = 0;
200 ev->ev_flags = EVLIST_INIT;
197} 201}
198 202
199int event_once (int fd, short events, void (*cb)(int, short, void *), void *arg, struct timeval *tv) 203int event_once (int fd, short events, void (*cb)(int, short, void *), void *arg, struct timeval *tv)
200{ 204{
201 return event_base_once (x_cur, fd, events, cb, arg, tv); 205 return event_base_once (x_cur, fd, events, cb, arg, tv);
210 214
211 if (ev->ev_events & EV_SIGNAL) 215 if (ev->ev_events & EV_SIGNAL)
212 { 216 {
213 ev_signal_set (&ev->iosig.sig, ev->ev_fd); 217 ev_signal_set (&ev->iosig.sig, ev->ev_fd);
214 ev_signal_start (EV_A_ &ev->iosig.sig); 218 ev_signal_start (EV_A_ &ev->iosig.sig);
219
220 ev->ev_flags |= EVLIST_SIGNAL;
215 } 221 }
216 else if (ev->ev_events & (EV_READ | EV_WRITE)) 222 else if (ev->ev_events & (EV_READ | EV_WRITE))
217 { 223 {
218 ev_io_set (&ev->iosig.io, ev->ev_fd, ev->ev_events & (EV_READ | EV_WRITE)); 224 ev_io_set (&ev->iosig.io, ev->ev_fd, ev->ev_events & (EV_READ | EV_WRITE));
219 ev_io_start (EV_A_ &ev->iosig.io); 225 ev_io_start (EV_A_ &ev->iosig.io);
226
227 ev->ev_flags |= EVLIST_INSERTED;
220 } 228 }
221 229
222 if (tv) 230 if (tv)
223 { 231 {
224 ev_timer_set (&ev->to, tv_get (tv), 0.); 232 ev_timer_set (&ev->to, tv_get (tv), 0.);
225 ev_timer_start (EV_A_ &ev->to); 233 ev_timer_start (EV_A_ &ev->to);
234
235 ev->ev_flags |= EVLIST_TIMEOUT;
226 } 236 }
237
238 ev->ev_flags |= EVLIST_ACTIVE;
227 239
228 return 0; 240 return 0;
229} 241}
230 242
231int event_del (struct event *ev) 243int event_del (struct event *ev)
245 ev_io_stop (EV_A_ &ev->iosig.io); 257 ev_io_stop (EV_A_ &ev->iosig.io);
246 } 258 }
247 259
248 if (ev_is_active (&ev->to)) 260 if (ev_is_active (&ev->to))
249 ev_timer_stop (EV_A_ &ev->to); 261 ev_timer_stop (EV_A_ &ev->to);
262
263 ev->ev_flags = EVLIST_INIT;
250 264
251 return 0; 265 return 0;
252} 266}
253 267
254void event_active (struct event *ev, int res, short ncalls) 268void event_active (struct event *ev, int res, short ncalls)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines