Skip to content

Commit

Permalink
src: add more can_call_into_js() guards
Browse files Browse the repository at this point in the history
This is in preparation for running native `SetImmediate()`
callbacks during shutdown.

PR-URL: nodejs#30666
Fixes: nodejs#30643
Refs: nodejs#30374
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
addaleax authored and MylesBorins committed Apr 1, 2020
1 parent b18531d commit ece9faf
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 2 deletions.
5 changes: 4 additions & 1 deletion src/env.cc
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,9 @@ void Environment::RegisterHandleCleanups() {
}

void Environment::CleanupHandles() {
Isolate::DisallowJavascriptExecutionScope disallow_js(isolate(),
Isolate::DisallowJavascriptExecutionScope::THROW_ON_FAILURE);

for (ReqWrapBase* request : req_wrap_queue_)
request->Cancel();

Expand Down Expand Up @@ -674,7 +677,7 @@ void Environment::RunAndClearNativeImmediates() {

head->Call(this);
if (UNLIKELY(try_catch.HasCaught())) {
if (!try_catch.HasTerminated())
if (!try_catch.HasTerminated() && can_call_into_js())
errors::TriggerUncaughtException(isolate(), try_catch);

// We are done with the current callback. Move one iteration along,
Expand Down
5 changes: 4 additions & 1 deletion src/node_errors.cc
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,9 @@ static void ReportFatalException(Environment* env,
Local<Value> error,
Local<Message> message,
EnhanceFatalException enhance_stack) {
if (!env->can_call_into_js())
enhance_stack = EnhanceFatalException::kDontEnhance;

Isolate* isolate = env->isolate();
CHECK(!error.IsEmpty());
CHECK(!message.IsEmpty());
Expand Down Expand Up @@ -914,7 +917,7 @@ void TriggerUncaughtException(Isolate* isolate,
}

MaybeLocal<Value> handled;
{
if (env->can_call_into_js()) {
// We do not expect the global uncaught exception itself to throw any more
// exceptions. If it does, exit the current Node.js instance.
errors::TryCatchScope try_catch(env,
Expand Down
2 changes: 2 additions & 0 deletions src/node_process_events.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ Maybe<bool> ProcessEmitWarningGeneric(Environment* env,
const char* warning,
const char* type,
const char* code) {
if (!env->can_call_into_js()) return Just(false);

HandleScope handle_scope(env->isolate());
Context::Scope context_scope(env->context());

Expand Down

0 comments on commit ece9faf

Please sign in to comment.