From e70b05208fe9339e412b16788dd12752cbbf1bc4 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sat, 3 Oct 2020 21:40:12 +0200 Subject: [PATCH] src: remove invalid ToLocalChecked in EmitBeforeExit This call can fail, we should not use `.ToLocalChecked()` here. In the long run, we should use variants of `EmitExit()` and `EmitBeforeExit()` that avoid this problem by properly propagating empty `MaybeLocal`s. Example failure: 21:07:17 not ok 2564 parallel/test-worker-terminate-source-map 21:07:17 --- 21:07:17 duration_ms: 0.385 21:07:17 severity: crashed 21:07:17 exitcode: -6 21:07:17 stack: |- 21:07:17 FATAL ERROR: v8::ToLocalChecked Empty MaybeLocal. 21:07:17 1: 0x1012f04a5 node::Abort() (.cold.1) [/Users/iojs/build/workspace/node-test-commit-osx/nodes/osx1015/out/Release/node] 21:07:17 2: 0x1000b52d9 node::Abort() [/Users/iojs/build/workspace/node-test-commit-osx/nodes/osx1015/out/Release/node] 21:07:17 3: 0x1000b543f node::OnFatalError(char const*, char const*) [/Users/iojs/build/workspace/node-test-commit-osx/nodes/osx1015/out/Release/node] 21:07:17 4: 0x1001ffd70 v8::V8::ToLocalEmpty() [/Users/iojs/build/workspace/node-test-commit-osx/nodes/osx1015/out/Release/node] 21:07:17 5: 0x1000079b8 node::EmitBeforeExit(node::Environment*) [/Users/iojs/build/workspace/node-test-commit-osx/nodes/osx1015/out/Release/node] 21:07:17 6: 0x100156fea node::worker::Worker::Run() [/Users/iojs/build/workspace/node-test-commit-osx/nodes/osx1015/out/Release/node] 21:07:17 7: 0x10015a4d2 node::worker::Worker::StartThread(v8::FunctionCallbackInfo const&)::$_3::__invoke(void*) [/Users/iojs/build/workspace/node-test-commit-osx/nodes/osx1015/out/Release/node] 21:07:17 8: 0x7fff72fe7109 _pthread_start [/usr/lib/system/libsystem_pthread.dylib] 21:07:17 9: 0x7fff72fe2b8b thread_start [/usr/lib/system/libsystem_pthread.dylib] 21:07:17 ... PR-URL: https://github.com/nodejs/node/pull/35484 Reviewed-By: Anatoli Papirovski Reviewed-By: Richard Lau --- src/api/hooks.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/api/hooks.cc b/src/api/hooks.cc index 3b16c0350d8a84..ce1610c5c49685 100644 --- a/src/api/hooks.cc +++ b/src/api/hooks.cc @@ -45,7 +45,9 @@ void EmitBeforeExit(Environment* env) { Local exit_code; if (!exit_code_v->ToInteger(env->context()).ToLocal(&exit_code)) return; - ProcessEmit(env, "beforeExit", exit_code).ToLocalChecked(); + // TODO(addaleax): Provide variants of EmitExit() and EmitBeforeExit() that + // actually forward empty MaybeLocal<>s (and check env->can_call_into_js()). + USE(ProcessEmit(env, "beforeExit", exit_code)); } int EmitExit(Environment* env) {