src: add more can_call_into_js() guards

This is in preparation for running native `SetImmediate()`
callbacks during shutdown.

PR-URL: https://github.com/nodejs/node/pull/30666
Fixes: https://github.com/nodejs/node/issues/30643
Refs: https://github.com/nodejs/node/pull/30374
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Anna Henningsen
2019-11-26 17:05:25 +01:00
parent f73716d35a
commit 5b59c24841
3 changed files with 10 additions and 2 deletions

View File

@@ -527,6 +527,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();
@@ -661,7 +664,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,

View File

@@ -278,6 +278,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());
@@ -956,7 +959,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,

View File

@@ -34,6 +34,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());