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.198 by root, Sun Dec 23 04:45:51 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#if EV_USE_MONOTONIC
286/* sig_atomic_t is used to avoid per-thread variables or locking but still */
287/* giving it a reasonably high chance of working on typical architetcures */
285static int have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */ 288static sig_atomic_t have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */
289#endif
286 290
287#ifdef _WIN32 291#ifdef _WIN32
288# include "ev_win32.c" 292# include "ev_win32.c"
289#endif 293#endif
290 294
970} 974}
971 975
972unsigned int 976unsigned int
973ev_embeddable_backends (void) 977ev_embeddable_backends (void)
974{ 978{
979 int flags = EVBACKEND_EPOLL | EVBACKEND_KQUEUE | EVBACKEND_PORT;
980
975 /* epoll embeddability broken on all linux versions up to at least 2.6.23 */ 981 /* epoll embeddability broken on all linux versions up to at least 2.6.23 */
976 return EVBACKEND_KQUEUE 982 /* please fix it and tell me how to detect the fix */
977 | EVBACKEND_PORT; 983 flags &= ~EVBACKEND_EPOLL;
984
985 return flags;
978} 986}
979 987
980unsigned int 988unsigned int
981ev_backend (EV_P) 989ev_backend (EV_P)
982{ 990{
2264 ev_embed *w = (ev_embed *)(((char *)io) - offsetof (ev_embed, io)); 2272 ev_embed *w = (ev_embed *)(((char *)io) - offsetof (ev_embed, io));
2265 2273
2266 if (ev_cb (w)) 2274 if (ev_cb (w))
2267 ev_feed_event (EV_A_ (W)w, EV_EMBED); 2275 ev_feed_event (EV_A_ (W)w, EV_EMBED);
2268 else 2276 else
2269 ev_embed_sweep (loop, w); 2277 ev_loop (w->other, EVLOOP_NONBLOCK);
2270} 2278}
2271 2279
2272static void 2280static void
2273embed_prepare_cb (EV_P_ ev_prepare *prepare, int revents) 2281embed_prepare_cb (EV_P_ ev_prepare *prepare, int revents)
2274{ 2282{
2275 ev_embed *w = (ev_embed *)(((char *)prepare) - offsetof (ev_embed, prepare)); 2283 ev_embed *w = (ev_embed *)(((char *)prepare) - offsetof (ev_embed, prepare));
2276 2284
2277 fd_reify (w->other); 2285 {
2286 struct ev_loop *loop = w->other;
2287
2288 while (fdchangecnt)
2289 {
2290 fd_reify (EV_A);
2291 ev_loop (EV_A_ EVLOOP_NONBLOCK);
2292 }
2293 }
2278} 2294}
2295
2296#if 0
2297static void
2298embed_idle_cb (EV_P_ ev_idle *idle, int revents)
2299{
2300 ev_idle_stop (EV_A_ idle);
2301}
2302#endif
2279 2303
2280void 2304void
2281ev_embed_start (EV_P_ ev_embed *w) 2305ev_embed_start (EV_P_ ev_embed *w)
2282{ 2306{
2283 if (expect_false (ev_is_active (w))) 2307 if (expect_false (ev_is_active (w)))
2294 2318
2295 ev_prepare_init (&w->prepare, embed_prepare_cb); 2319 ev_prepare_init (&w->prepare, embed_prepare_cb);
2296 ev_set_priority (&w->prepare, EV_MINPRI); 2320 ev_set_priority (&w->prepare, EV_MINPRI);
2297 ev_prepare_start (EV_A_ &w->prepare); 2321 ev_prepare_start (EV_A_ &w->prepare);
2298 2322
2323 /*ev_idle_init (&w->idle, e,bed_idle_cb);*/
2324
2299 ev_start (EV_A_ (W)w, 1); 2325 ev_start (EV_A_ (W)w, 1);
2300} 2326}
2301 2327
2302void 2328void
2303ev_embed_stop (EV_P_ ev_embed *w) 2329ev_embed_stop (EV_P_ ev_embed *w)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines