typedef ev_watcher_list *WL;
typedef ev_watcher_time *WT;
-static int have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */
+#if EV_USE_MONOTONIC
+/* sig_atomic_t is used to avoid per-thread variables or locking but still */
+/* giving it a reasonably high chance of working on typical architetcures */
+static sig_atomic_t have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */
+#endif
#ifdef _WIN32
# include "ev_win32.c"
unsigned int
ev_embeddable_backends (void)
{
+ int flags = EVBACKEND_EPOLL | EVBACKEND_KQUEUE | EVBACKEND_PORT;
+
/* epoll embeddability broken on all linux versions up to at least 2.6.23 */
- return EVBACKEND_KQUEUE
- | EVBACKEND_PORT;
+ /* please fix it and tell me how to detect the fix */
+ flags &= ~EVBACKEND_EPOLL;
+
+ return flags;
}
unsigned int
if (ev_cb (w))
ev_feed_event (EV_A_ (W)w, EV_EMBED);
else
- ev_embed_sweep (loop, w);
+ ev_loop (w->other, EVLOOP_NONBLOCK);
}
static void
{
ev_embed *w = (ev_embed *)(((char *)prepare) - offsetof (ev_embed, prepare));
- fd_reify (w->other);
+ {
+ struct ev_loop *loop = w->other;
+
+ while (fdchangecnt)
+ {
+ fd_reify (EV_A);
+ ev_loop (EV_A_ EVLOOP_NONBLOCK);
+ }
+ }
+}
+
+#if 0
+static void
+embed_idle_cb (EV_P_ ev_idle *idle, int revents)
+{
+ ev_idle_stop (EV_A_ idle);
}
+#endif
void
ev_embed_start (EV_P_ ev_embed *w)
ev_set_priority (&w->prepare, EV_MINPRI);
ev_prepare_start (EV_A_ &w->prepare);
+ /*ev_idle_init (&w->idle, e,bed_idle_cb);*/
+
ev_start (EV_A_ (W)w, 1);
}