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

Comparing libev/ev.c (file contents):
Revision 1.194 by root, Sat Dec 22 07:03:31 2007 UTC vs.
Revision 1.196 by root, Sat Dec 22 12:43:28 2007 UTC

972} 972}
973 973
974unsigned int 974unsigned int
975ev_embeddable_backends (void) 975ev_embeddable_backends (void)
976{ 976{
977 int flags = EVBACKEND_EPOLL | EVBACKEND_KQUEUE | EVBACKEND_PORT;
978
977 /* epoll embeddability broken on all linux versions up to at least 2.6.23 */ 979 /* epoll embeddability broken on all linux versions up to at least 2.6.23 */
978 return EVBACKEND_KQUEUE 980 /* please fix it and tell me how to detect the fix */
979 | EVBACKEND_PORT; 981 flags &= ~EVBACKEND_EPOLL;
982
983#ifdef __APPLE__
984 /* is there anything thats not broken on darwin? */
985 flags &= ~EVBACKEND_KQUEUE;
986#endif
987
988 return flags;
980} 989}
981 990
982unsigned int 991unsigned int
983ev_backend (EV_P) 992ev_backend (EV_P)
984{ 993{
2266 ev_embed *w = (ev_embed *)(((char *)io) - offsetof (ev_embed, io)); 2275 ev_embed *w = (ev_embed *)(((char *)io) - offsetof (ev_embed, io));
2267 2276
2268 if (ev_cb (w)) 2277 if (ev_cb (w))
2269 ev_feed_event (EV_A_ (W)w, EV_EMBED); 2278 ev_feed_event (EV_A_ (W)w, EV_EMBED);
2270 else 2279 else
2271 ev_embed_sweep (loop, w); 2280 ev_loop (w->other, EVLOOP_NONBLOCK);
2272} 2281}
2273 2282
2274static void 2283static void
2275embed_prepare_cb (EV_P_ ev_prepare *prepare, int revents) 2284embed_prepare_cb (EV_P_ ev_prepare *prepare, int revents)
2276{ 2285{
2277 ev_embed *w = (ev_embed *)(((char *)prepare) - offsetof (ev_embed, prepare)); 2286 ev_embed *w = (ev_embed *)(((char *)prepare) - offsetof (ev_embed, prepare));
2278 2287
2279 fd_reify (w->other); 2288 {
2289 struct ev_loop *loop = w->other;
2290
2291 while (fdchangecnt)
2292 {
2293 fd_reify (EV_A);
2294 ev_loop (EV_A_ EVLOOP_NONBLOCK);
2295 }
2296 }
2280} 2297}
2298
2299#if 0
2300static void
2301embed_idle_cb (EV_P_ ev_idle *idle, int revents)
2302{
2303 ev_idle_stop (EV_A_ idle);
2304}
2305#endif
2281 2306
2282void 2307void
2283ev_embed_start (EV_P_ ev_embed *w) 2308ev_embed_start (EV_P_ ev_embed *w)
2284{ 2309{
2285 if (expect_false (ev_is_active (w))) 2310 if (expect_false (ev_is_active (w)))
2296 2321
2297 ev_prepare_init (&w->prepare, embed_prepare_cb); 2322 ev_prepare_init (&w->prepare, embed_prepare_cb);
2298 ev_set_priority (&w->prepare, EV_MINPRI); 2323 ev_set_priority (&w->prepare, EV_MINPRI);
2299 ev_prepare_start (EV_A_ &w->prepare); 2324 ev_prepare_start (EV_A_ &w->prepare);
2300 2325
2326 /*ev_idle_init (&w->idle, e,bed_idle_cb);*/
2327
2301 ev_start (EV_A_ (W)w, 1); 2328 ev_start (EV_A_ (W)w, 1);
2302} 2329}
2303 2330
2304void 2331void
2305ev_embed_stop (EV_P_ ev_embed *w) 2332ev_embed_stop (EV_P_ ev_embed *w)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines