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

Comparing libev/ev.c (file contents):
Revision 1.193 by root, Sat Dec 22 05:47:58 2007 UTC vs.
Revision 1.196 by root, Sat Dec 22 12:43:28 2007 UTC

280 280
281typedef ev_watcher *W; 281typedef ev_watcher *W;
282typedef ev_watcher_list *WL; 282typedef ev_watcher_list *WL;
283typedef ev_watcher_time *WT; 283typedef ev_watcher_time *WT;
284 284
285/* sig_atomic_t is used to avoid per-thread variables or locking but still */
286/* giving it a reasonably high chance of working on typical architetcures */
285static int have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */ 287static sig_atomic_t have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */
286 288
287#ifdef _WIN32 289#ifdef _WIN32
288# include "ev_win32.c" 290# include "ev_win32.c"
289#endif 291#endif
290 292
970} 972}
971 973
972unsigned int 974unsigned int
973ev_embeddable_backends (void) 975ev_embeddable_backends (void)
974{ 976{
977 int flags = EVBACKEND_EPOLL | EVBACKEND_KQUEUE | EVBACKEND_PORT;
978
975 /* 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 */
976 return EVBACKEND_KQUEUE 980 /* please fix it and tell me how to detect the fix */
977 | 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;
978} 989}
979 990
980unsigned int 991unsigned int
981ev_backend (EV_P) 992ev_backend (EV_P)
982{ 993{
2264 ev_embed *w = (ev_embed *)(((char *)io) - offsetof (ev_embed, io)); 2275 ev_embed *w = (ev_embed *)(((char *)io) - offsetof (ev_embed, io));
2265 2276
2266 if (ev_cb (w)) 2277 if (ev_cb (w))
2267 ev_feed_event (EV_A_ (W)w, EV_EMBED); 2278 ev_feed_event (EV_A_ (W)w, EV_EMBED);
2268 else 2279 else
2269 ev_embed_sweep (loop, w); 2280 ev_loop (w->other, EVLOOP_NONBLOCK);
2270} 2281}
2271 2282
2272static void 2283static void
2273embed_prepare_cb (EV_P_ ev_prepare *prepare, int revents) 2284embed_prepare_cb (EV_P_ ev_prepare *prepare, int revents)
2274{ 2285{
2275 ev_embed *w = (ev_embed *)(((char *)prepare) - offsetof (ev_embed, prepare)); 2286 ev_embed *w = (ev_embed *)(((char *)prepare) - offsetof (ev_embed, prepare));
2276 2287
2277 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 }
2278} 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
2279 2306
2280void 2307void
2281ev_embed_start (EV_P_ ev_embed *w) 2308ev_embed_start (EV_P_ ev_embed *w)
2282{ 2309{
2283 if (expect_false (ev_is_active (w))) 2310 if (expect_false (ev_is_active (w)))
2294 2321
2295 ev_prepare_init (&w->prepare, embed_prepare_cb); 2322 ev_prepare_init (&w->prepare, embed_prepare_cb);
2296 ev_set_priority (&w->prepare, EV_MINPRI); 2323 ev_set_priority (&w->prepare, EV_MINPRI);
2297 ev_prepare_start (EV_A_ &w->prepare); 2324 ev_prepare_start (EV_A_ &w->prepare);
2298 2325
2326 /*ev_idle_init (&w->idle, e,bed_idle_cb);*/
2327
2299 ev_start (EV_A_ (W)w, 1); 2328 ev_start (EV_A_ (W)w, 1);
2300} 2329}
2301 2330
2302void 2331void
2303ev_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