From 6d4a4d53fc5f20c29ced30a474cc940425a7f136 Mon Sep 17 00:00:00 2001 From: Stephen Belanger Date: Mon, 9 Dec 2024 21:17:26 +0800 Subject: [PATCH] worker: fix crash when a worker joins after exit If a worker has not already joined before running to completion it will join in a SetImmediateThreadsafe which could occur after the worker has already ended by other means. Mutating a JS object at that point would fail because the isolate is already disposed. --- src/node_worker.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/node_worker.cc b/src/node_worker.cc index e8026fe24c7021..f64609cf045441 100644 --- a/src/node_worker.cc +++ b/src/node_worker.cc @@ -449,6 +449,9 @@ void Worker::JoinThread() { env()->remove_sub_worker_context(this); + // Join may happen after the worker exits and disposes the isolate + if (!env()->can_call_into_js()) return; + { HandleScope handle_scope(env()->isolate()); Context::Scope context_scope(env()->context());