From 6ed721afd2a85305eb69a3c727e64848c99c76e1 Mon Sep 17 00:00:00 2001 From: Bert Belder Date: Tue, 29 Nov 2011 12:45:39 +0100 Subject: [PATCH] Upgrade libuv to fce90652ed38ab0925131ed141972354a494933b --- deps/uv/src/win/core.c | 14 ++++++-------- deps/uv/src/win/req.c | 36 ++++++++++++++---------------------- 2 files changed, 20 insertions(+), 30 deletions(-) diff --git a/deps/uv/src/win/core.c b/deps/uv/src/win/core.c index 4914fb4190d..e6bcc5fe68c 100644 --- a/deps/uv/src/win/core.c +++ b/deps/uv/src/win/core.c @@ -204,13 +204,8 @@ static void uv_poll_ex(uv_loop_t* loop, int block) { uv_idle_invoke((loop)); \ } \ \ - /* Completely flush all pending reqs and endgames. */ \ - /* We do even when we just called the idle callbacks because those may */ \ - /* have closed handles or started requests that short-circuited. */ \ - while ((loop)->pending_reqs_tail || (loop)->endgame_handles) { \ - uv_process_endgames((loop)); \ - uv_process_reqs((loop)); \ - } \ + uv_process_reqs((loop)); \ + uv_process_endgames((loop)); \ \ if ((loop)->refs <= 0) { \ break; \ @@ -218,7 +213,10 @@ static void uv_poll_ex(uv_loop_t* loop, int block) { \ uv_prepare_invoke((loop)); \ \ - poll((loop), (loop)->idle_handles == NULL && (loop)->refs > 0); \ + poll((loop), (loop)->idle_handles == NULL && \ + (loop)->pending_reqs_tail == NULL && \ + (loop)->endgame_handles == NULL && \ + (loop)->refs > 0); \ \ uv_check_invoke((loop)); \ } diff --git a/deps/uv/src/win/req.c b/deps/uv/src/win/req.c index dd2b38809e9..65aa6c15814 100644 --- a/deps/uv/src/win/req.c +++ b/deps/uv/src/win/req.c @@ -51,27 +51,6 @@ void uv_insert_pending_req(uv_loop_t* loop, uv_req_t* req) { } -static uv_req_t* uv_remove_pending_req(uv_loop_t* loop) { - uv_req_t* req; - - if (loop->pending_reqs_tail) { - req = loop->pending_reqs_tail->next_req; - - if (req == loop->pending_reqs_tail) { - loop->pending_reqs_tail = NULL; - } else { - loop->pending_reqs_tail->next_req = req->next_req; - } - - return req; - - } else { - /* queue empty */ - return NULL; - } -} - - #define DELEGATE_STREAM_REQ(loop, req, method, handle_at) \ do { \ switch (((uv_handle_t*) (req)->handle_at)->type) { \ @@ -101,8 +80,21 @@ static uv_req_t* uv_remove_pending_req(uv_loop_t* loop) { void uv_process_reqs(uv_loop_t* loop) { uv_req_t* req; + uv_req_t* first; + uv_req_t* next; + + if (loop->pending_reqs_tail == NULL) { + return; + } + + first = loop->pending_reqs_tail->next_req; + next = first; + loop->pending_reqs_tail = NULL; + + while (next != NULL) { + req = next; + next = req->next_req != first ? req->next_req : NULL; - while (req = uv_remove_pending_req(loop)) { switch (req->type) { case UV_READ: DELEGATE_STREAM_REQ(loop, req, read, data);