diff --git a/src/node_worker.cc b/src/node_worker.cc index a734d65965a9d7..752fc48141f5e1 100644 --- a/src/node_worker.cc +++ b/src/node_worker.cc @@ -7,6 +7,7 @@ #include "node_buffer.h" #include "node_options-inl.h" #include "node_perf.h" +#include "node_snapshot_builder.h" #include "util-inl.h" #include "async_wrap-inl.h" @@ -146,6 +147,20 @@ class WorkerThreadData { SetIsolateCreateParamsForNode(¶ms); params.array_buffer_allocator_shared = allocator; + bool use_node_snapshot = true; + if (w_->per_isolate_opts_) { + use_node_snapshot = w_->per_isolate_opts_->node_snapshot; + } else { + // IsolateData is created after the Isolate is created so we'll + // inherit the option from the parent here. + use_node_snapshot = per_process::cli_options->per_isolate->node_snapshot; + } + const SnapshotData* snapshot_data = + use_node_snapshot ? SnapshotBuilder::GetEmbeddedSnapshotData() + : nullptr; + if (snapshot_data != nullptr) { + SnapshotBuilder::InitializeIsolateParams(snapshot_data, ¶ms); + } w->UpdateResourceConstraints(¶ms.constraints); Isolate* isolate = Isolate::Allocate(); diff --git a/test/parallel/test-worker-nearheaplimit-deadlock.js b/test/parallel/test-worker-nearheaplimit-deadlock.js index 1f38bc074da048..cf4c0d972c8719 100644 --- a/test/parallel/test-worker-nearheaplimit-deadlock.js +++ b/test/parallel/test-worker-nearheaplimit-deadlock.js @@ -10,7 +10,11 @@ if (!process.env.HAS_STARTED_WORKER) { resourceLimits: { maxYoungGenerationSizeMb: 0, maxOldGenerationSizeMb: 0 - } + }, + // With node snapshot the OOM can occur during the deserialization of + // the context, so disable it since we want the OOM to occur during + // the creation of the message port. + execArgv: [ ...process.execArgv, '--no-node-snapshot'] }; const worker = new Worker(__filename, opts);