diff --git a/src/node.cc b/src/node.cc index 7055c98603a899..6f4ccbdeac4139 100644 --- a/src/node.cc +++ b/src/node.cc @@ -116,6 +116,7 @@ using v8::Number; using v8::Object; using v8::ObjectTemplate; using v8::PropertyCallbackInfo; +using v8::SealHandleScope; using v8::String; using v8::TryCatch; using v8::Uint32; @@ -3769,19 +3770,23 @@ int Start(int argc, char** argv) { if (use_debug_agent) EnableDebug(env); - bool more; - do { - more = uv_run(env->event_loop(), UV_RUN_ONCE); - if (more == false) { - EmitBeforeExit(env); - - // 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); + { + SealHandleScope seal(node_isolate); + bool more; + do { + more = uv_run(env->event_loop(), UV_RUN_ONCE); + if (more == false) { + EmitBeforeExit(env); + + // 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); RunAtExit(env);