summaryrefslogtreecommitdiff
path: root/src/env.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/env.cc')
-rw-r--r--src/env.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/env.cc b/src/env.cc
index da253fac6d..9034c4e069 100644
--- a/src/env.cc
+++ b/src/env.cc
@@ -530,6 +530,8 @@ void Environment::CleanupHandles() {
Isolate::DisallowJavascriptExecutionScope disallow_js(isolate(),
Isolate::DisallowJavascriptExecutionScope::THROW_ON_FAILURE);
+ RunAndClearNativeImmediates(true /* skip SetUnrefImmediate()s */);
+
for (ReqWrapBase* request : req_wrap_queue_)
request->Cancel();
@@ -645,7 +647,7 @@ void Environment::AtExit(void (*cb)(void* arg), void* arg) {
at_exit_functions_.push_front(ExitCallback{cb, arg});
}
-void Environment::RunAndClearNativeImmediates() {
+void Environment::RunAndClearNativeImmediates(bool only_refed) {
TraceEventScope trace_scope(TRACING_CATEGORY_NODE1(environment),
"RunAndClearNativeImmediates", this);
size_t ref_count = 0;
@@ -662,7 +664,9 @@ void Environment::RunAndClearNativeImmediates() {
if (head->is_refed())
ref_count++;
- head->Call(this);
+ if (head->is_refed() || !only_refed)
+ head->Call(this);
+
if (UNLIKELY(try_catch.HasCaught())) {
if (!try_catch.HasTerminated() && can_call_into_js())
errors::TriggerUncaughtException(isolate(), try_catch);