X-Git-Url: https://git.llucax.com/software/libev.git/blobdiff_plain/756a6378f76a80c595335d4a78ab426cc44d247d..647706a2acbfa58a6fdf5fb3ab17f82833faa0b0:/ev.c diff --git a/ev.c b/ev.c index 3518002..221da59 100644 --- a/ev.c +++ b/ev.c @@ -1344,7 +1344,7 @@ ev_loop (EV_P_ int flags) call_pending (EV_A); /* in case we recurse, ensure ordering stays nice and clean */ - while (activecnt) + while (expect_false (!activecnt)) { #ifndef _WIN32 if (expect_false (curpid)) /* penalise the forking check even more */ @@ -1372,6 +1372,9 @@ ev_loop (EV_P_ int flags) call_pending (EV_A); } + if (expect_false (!activecnt)) + break; + /* we might have forked, so reify kernel state if necessary */ if (expect_false (postfork)) loop_fork (EV_A); @@ -1383,7 +1386,7 @@ ev_loop (EV_P_ int flags) { ev_tstamp block; - if (flags & EVLOOP_NONBLOCK || idlecnt) + if (expect_false (flags & EVLOOP_NONBLOCK || idlecnt || !activecnt)) block = 0.; /* do not block at all */ else {