From: Fedor Indutny Date: Fri, 28 Feb 2014 13:25:28 +0000 (+0400) Subject: node: invoke `beforeExit` again if loop was active X-Git-Tag: v0.11.12~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5596f936d81b6309b9703d2d3fd4c129bb351672;p=platform%2Fupstream%2Fnodejs.git node: invoke `beforeExit` again if loop was active When `setImmediate(cb)` is called in `beforeExit` event handler the consequent `uv_run(..., UV_RUN_NOWAIT)` may return `0`, even if there was some active handles at start. Fixes simple/test-beforeexit-event.js. --- diff --git a/src/node.cc b/src/node.cc index 0a9a0cd..6accd4b 100644 --- a/src/node.cc +++ b/src/node.cc @@ -3536,7 +3536,12 @@ int Start(int argc, char** argv) { more = uv_run(env->event_loop(), UV_RUN_ONCE); if (more == false) { EmitBeforeExit(env); - more = uv_run(env->event_loop(), UV_RUN_NOWAIT); + + // Emit `beforeExit` if the loop became alive either after emitting + // event, or after running some callbacks. + more = uv_loop_alive(env->event_loop()); + if (uv_run(env->event_loop(), UV_RUN_NOWAIT) != 0) + more = true; } } while (more == true); code = EmitExit(env);