diff --git a/src/win/core.c b/src/win/core.c index e56536a7..d1343df1 100644 --- a/src/win/core.c +++ b/src/win/core.c @@ -249,10 +249,13 @@ static void uv_poll_ex(uv_loop_t* loop, int block) { } } -#define UV_LOOP_ALIVE(loop) \ - ((loop)->active_handles > 0 || \ - !ngx_queue_empty(&(loop)->active_reqs) || \ - (loop)->endgame_handles != NULL) + +static int uv__loop_alive(uv_loop_t* loop) { + return loop->active_handles > 0 || + !ngx_queue_empty(&loop->active_reqs) || + loop->endgame_handles != NULL; +} + int uv_run(uv_loop_t *loop, uv_run_mode mode) { int r; @@ -263,8 +266,10 @@ int uv_run(uv_loop_t *loop, uv_run_mode mode) { else poll = &uv_poll; - r = UV_LOOP_ALIVE(loop); - while (r) { + if (!uv__loop_alive(loop)) + return 0; + + do { uv_update_time(loop); uv_process_timers(loop); @@ -282,14 +287,13 @@ int uv_run(uv_loop_t *loop, uv_run_mode mode) { (*poll)(loop, loop->idle_handles == NULL && loop->pending_reqs_tail == NULL && loop->endgame_handles == NULL && - UV_LOOP_ALIVE(loop) && + (loop->active_handles > 0 || + !ngx_queue_empty(&loop->active_reqs)) && !(mode & UV_RUN_NOWAIT)); uv_check_invoke(loop); - r = UV_LOOP_ALIVE(loop); + r = uv__loop_alive(loop); + } while (r && !(mode & (UV_RUN_ONCE | UV_RUN_NOWAIT))); - if (mode & (UV_RUN_ONCE | UV_RUN_NOWAIT)) - break; - } return r; }