From 04df3daa3f9e97e11c0a604856f88c74589cdf63 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Tue, 14 Jul 2020 17:21:03 +0200 Subject: [PATCH] src: do not crash if ToggleAsyncHook fails during termination MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In the termination case, we should not crash. There’s also no harm being done by ignoring the termination exception here, since the thread is about to be torn down anyway. Also, add a guard against running this during shutdown. That is the likely cause of https://github.com/nodejs/node/issues/34361. Fixes: https://github.com/nodejs/node/issues/34361 PR-URL: https://github.com/nodejs/node/pull/34362 Fixes: https://github.com/nodejs/node/issues/27261 Reviewed-By: Gus Caplan Reviewed-By: Joyee Cheung Reviewed-By: James M Snell --- src/inspector_agent.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/inspector_agent.cc b/src/inspector_agent.cc index 7712a62d7cbeb0..54849014a90dd4 100644 --- a/src/inspector_agent.cc +++ b/src/inspector_agent.cc @@ -928,13 +928,18 @@ void Agent::DisableAsyncHook() { void Agent::ToggleAsyncHook(Isolate* isolate, const Global& fn) { + // Guard against running this during cleanup -- no async events will be + // emitted anyway at that point anymore, and calling into JS is not possible. + // This should probably not be something we're attempting in the first place, + // Refs: https://github.com/nodejs/node/pull/34362#discussion_r456006039 + if (!parent_env_->can_call_into_js()) return; CHECK(parent_env_->has_run_bootstrapping_code()); HandleScope handle_scope(isolate); CHECK(!fn.IsEmpty()); auto context = parent_env_->context(); v8::TryCatch try_catch(isolate); USE(fn.Get(isolate)->Call(context, Undefined(isolate), 0, nullptr)); - if (try_catch.HasCaught()) { + if (try_catch.HasCaught() && !try_catch.HasTerminated()) { PrintCaughtException(isolate, context, try_catch); FatalError("\nnode::inspector::Agent::ToggleAsyncHook", "Cannot toggle Inspector's AsyncHook, please report this.");