From b2e13b9f006bdc622018672d3ca33f49e60630e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Fri, 21 Oct 2016 10:08:06 -0300 Subject: [PATCH] Revert "unix,win: simplify calculating polling timeout" This reverts commit a35308306fc9614407194fd294fdc130c98b53a5. The original commit introduced unforeseen regressions. See https://github.com/libuv/libuv/pull/1096. Fixes: https://github.com/libuv/libuv/pull/1096 PR-URL: https://github.com/libuv/libuv/pull/1102 Reviewed-By: Colin Ihrig Reviewed-By: Ben Noordhuis --- src/unix/core.c | 5 ++++- src/win/core.c | 9 ++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/unix/core.c b/src/unix/core.c index e8e256d9f..a2c07e6a4 100644 --- a/src/unix/core.c +++ b/src/unix/core.c @@ -301,7 +301,7 @@ int uv_backend_timeout(const uv_loop_t* loop) { if (loop->stop_flag != 0) return 0; - if (!uv_loop_alive(loop)) + if (!uv__has_active_handles(loop) && !uv__has_active_reqs(loop)) return 0; if (!QUEUE_EMPTY(&loop->idle_handles)) @@ -310,6 +310,9 @@ int uv_backend_timeout(const uv_loop_t* loop) { if (!QUEUE_EMPTY(&loop->pending_queue)) return 0; + if (loop->closing_handles) + return 0; + return uv__next_timeout(loop); } diff --git a/src/win/core.c b/src/win/core.c index d9c57a42c..e84186d4e 100644 --- a/src/win/core.c +++ b/src/win/core.c @@ -336,12 +336,15 @@ int uv_backend_timeout(const uv_loop_t* loop) { if (loop->stop_flag != 0) return 0; - if (!uv_loop_alive(loop)) + if (!uv__has_active_handles(loop) && !uv__has_active_reqs(loop)) return 0; if (loop->pending_reqs_tail) return 0; + if (loop->endgame_handles) + return 0; + if (loop->idle_handles) return 0; @@ -460,8 +463,8 @@ static void uv_poll_ex(uv_loop_t* loop, DWORD timeout) { static int uv__loop_alive(const uv_loop_t* loop) { - return uv__has_active_handles(loop) || - uv__has_active_reqs(loop) || + return loop->active_handles > 0 || + !QUEUE_EMPTY(&loop->active_reqs) || loop->endgame_handles != NULL; }