diff --git a/src/env.cc b/src/env.cc index 0eda889802710d..387c9892d01d4f 100644 --- a/src/env.cc +++ b/src/env.cc @@ -574,19 +574,11 @@ IsolateData::IsolateData(Isolate* isolate, platform_(platform), snapshot_data_(snapshot_data), options_(std::move(options)) { - v8::CppHeap* cpp_heap = isolate->GetCppHeap(); uint16_t cppgc_id = kDefaultCppGCEmbedderID; // We do not care about overflow since we just want this to be different // from the cppgc id. uint16_t non_cppgc_id = cppgc_id + 1; - if (cpp_heap == nullptr) { - cpp_heap_ = CppHeap::Create(platform, v8::CppHeapCreateParams{{}}); - // TODO(joyeecheung): pass it into v8::Isolate::CreateParams and let V8 - // own it when we can keep the isolate registered/task runner discoverable - // during isolate disposal. - isolate->AttachCppHeap(cpp_heap_.get()); - } { // GC could still be run after the IsolateData is destroyed, so we store diff --git a/src/node_main_instance.cc b/src/node_main_instance.cc index 180875a6ed1c3f..790347056cde94 100644 --- a/src/node_main_instance.cc +++ b/src/node_main_instance.cc @@ -44,6 +44,8 @@ NodeMainInstance::NodeMainInstance(const SnapshotData* snapshot_data, isolate_params_(std::make_unique()), snapshot_data_(snapshot_data) { isolate_params_->array_buffer_allocator = array_buffer_allocator_.get(); + isolate_params_->cpp_heap = + v8::CppHeap::Create(platform_, v8::CppHeapCreateParams{{}}).release(); isolate_ = NewIsolate(isolate_params_.get(), event_loop, platform, snapshot_data); diff --git a/src/node_worker.cc b/src/node_worker.cc index f1df6eb93315cb..4166d1e3911eb2 100644 --- a/src/node_worker.cc +++ b/src/node_worker.cc @@ -162,6 +162,9 @@ class WorkerThreadData { SetIsolateCreateParamsForNode(¶ms); w->UpdateResourceConstraints(¶ms.constraints); params.array_buffer_allocator_shared = allocator; + params.cpp_heap = + v8::CppHeap::Create(w->platform_, v8::CppHeapCreateParams{{}}) + .release(); Isolate* isolate = NewIsolate(¶ms, &loop_, w->platform_, w->snapshot_data()); if (isolate == nullptr) {