diff --git a/shell/app/node_main.cc b/shell/app/node_main.cc index bb025dbc5a27..d7b785b02eff 100644 --- a/shell/app/node_main.cc +++ b/shell/app/node_main.cc @@ -260,37 +260,9 @@ int NodeMain(int argc, char* argv[]) { v8::HandleScope scope(isolate); node::LoadEnvironment(env, node::StartExecutionCallback{}); - env->set_trace_sync_io(env->options()->trace_sync_io); - - { - v8::SealHandleScope seal(isolate); - bool more; - env->performance_state()->Mark( - node::performance::NODE_PERFORMANCE_MILESTONE_LOOP_START); - do { - uv_run(env->event_loop(), UV_RUN_DEFAULT); - - gin_env.platform()->DrainTasks(isolate); - - more = uv_loop_alive(env->event_loop()); - if (more && !env->is_stopping()) - continue; - - if (!uv_loop_alive(env->event_loop())) { - 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()); - } while (more && !env->is_stopping()); - env->performance_state()->Mark( - node::performance::NODE_PERFORMANCE_MILESTONE_LOOP_EXIT); - } - - env->set_trace_sync_io(false); - - exit_code = node::EmitExit(env); + // Potential reasons we get Nothing here may include: the env + // is stopping, or the user hooks process.emit('exit'). + exit_code = node::SpinEventLoop(env).FromMaybe(1); node::ResetStdio();