X-Git-Url: https://git.llucax.com/software/libev.git/blobdiff_plain/647706a2acbfa58a6fdf5fb3ab17f82833faa0b0..0a7b0ac074d9987c6fa23ab20be4842e4514c7b9:/ev.c diff --git a/ev.c b/ev.c index 221da59..8cb6141 100644 --- a/ev.c +++ b/ev.c @@ -888,6 +888,12 @@ ev_backend (EV_P) return backend; } +unsigned int +ev_loop_count (EV_P) +{ + return loop_count; +} + static void noinline loop_init (EV_P_ unsigned int flags) { @@ -1344,7 +1350,7 @@ ev_loop (EV_P_ int flags) call_pending (EV_A); /* in case we recurse, ensure ordering stays nice and clean */ - while (expect_false (!activecnt)) + do { #ifndef _WIN32 if (expect_false (curpid)) /* penalise the forking check even more */ @@ -1420,6 +1426,7 @@ ev_loop (EV_P_ int flags) if (expect_false (block < 0.)) block = 0.; } + ++loop_count; backend_poll (EV_A_ block); } @@ -1442,9 +1449,8 @@ ev_loop (EV_P_ int flags) call_pending (EV_A); - if (expect_false (loop_done)) - break; } + while (expect_true (activecnt && !loop_done)); if (loop_done == EVUNLOOP_ONE) loop_done = EVUNLOOP_CANCEL;