From 577d228ca0dcba66ebbb86633e53ad89089fda92 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Tue, 8 Dec 2020 11:59:03 +0100 Subject: [PATCH] src: add way to get IsolateData and allocator from Environment Add a way to get the current `IsolateData*` and, from it, the current Node.js `ArrayBufferAllocator` if there is one. This can be useful for re-using either one of these structures as an embedder. PR-URL: https://github.com/nodejs/node/pull/36441 Reviewed-By: Daniel Bevenius Reviewed-By: Richard Lau Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Rich Trott --- src/api/environment.cc | 8 ++++++++ src/node.h | 2 ++ test/cctest/test_environment.cc | 3 +++ 3 files changed, 13 insertions(+) diff --git a/src/api/environment.cc b/src/api/environment.cc index 8aa230c8a60421..52c67b91c3b034 100644 --- a/src/api/environment.cc +++ b/src/api/environment.cc @@ -466,6 +466,14 @@ MultiIsolatePlatform* GetMainThreadMultiIsolatePlatform() { return per_process::v8_platform.Platform(); } +IsolateData* GetEnvironmentIsolateData(Environment* env) { + return env->isolate_data(); +} + +ArrayBufferAllocator* GetArrayBufferAllocator(IsolateData* isolate_data) { + return isolate_data->node_allocator(); +} + MultiIsolatePlatform* GetMultiIsolatePlatform(Environment* env) { return GetMultiIsolatePlatform(env->isolate_data()); } diff --git a/src/node.h b/src/node.h index b5c268eed685f1..f1b11aaa3edc90 100644 --- a/src/node.h +++ b/src/node.h @@ -500,6 +500,8 @@ NODE_EXTERN void DefaultProcessExitHandler(Environment* env, int exit_code); // This may return nullptr if context is not associated with a Node instance. NODE_EXTERN Environment* GetCurrentEnvironment(v8::Local context); +NODE_EXTERN IsolateData* GetEnvironmentIsolateData(Environment* env); +NODE_EXTERN ArrayBufferAllocator* GetArrayBufferAllocator(IsolateData* data); NODE_EXTERN void OnFatalError(const char* location, const char* message); NODE_EXTERN void PromiseRejectCallback(v8::PromiseRejectMessage message); diff --git a/test/cctest/test_environment.cc b/test/cctest/test_environment.cc index 13316ceccb4d8a..0dc789b0a79914 100644 --- a/test/cctest/test_environment.cc +++ b/test/cctest/test_environment.cc @@ -627,6 +627,9 @@ TEST_F(NodeZeroIsolateTestFixture, CtrlCWithOnlySafeTerminationTest) { {}), node::FreeEnvironment}; CHECK(environment); + EXPECT_EQ(node::GetEnvironmentIsolateData(environment.get()), + isolate_data.get()); + EXPECT_EQ(node::GetArrayBufferAllocator(isolate_data.get()), nullptr); v8::Local main_ret = node::LoadEnvironment(environment.get(),