summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-02-18 17:30:42 +0100
committerAnna Henningsen <anna@addaleax.net>2019-02-25 02:00:44 +0100
commit5c0e18fd407ec5766a8f326dbe3c870d3594ab7d (patch)
tree50a99eda8a25681e2aa5219aad9d7da8a98716a6
parent23b075d051acf16711de40cb248bf142ab297d47 (diff)
downloadandroid-node-v8-5c0e18fd407ec5766a8f326dbe3c870d3594ab7d.tar.gz
android-node-v8-5c0e18fd407ec5766a8f326dbe3c870d3594ab7d.tar.bz2
android-node-v8-5c0e18fd407ec5766a8f326dbe3c870d3594ab7d.zip
src: make IsolateData store ArrayBufferAllocator
This enables us to identify whether we are using an allocator that we know more about than what the generic `ArrayBuffer::Allocator` API provides, in particular whether it is `malloc()`-compatible. PR-URL: https://github.com/nodejs/node/pull/26207 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
-rw-r--r--src/api/environment.cc6
-rw-r--r--src/env-inl.h12
-rw-r--r--src/env.cc13
-rw-r--r--src/env.h14
4 files changed, 29 insertions, 16 deletions
diff --git a/src/api/environment.cc b/src/api/environment.cc
index 689f82bf24..7b6de8ba8d 100644
--- a/src/api/environment.cc
+++ b/src/api/environment.cc
@@ -124,11 +124,7 @@ IsolateData* CreateIsolateData(Isolate* isolate,
uv_loop_t* loop,
MultiIsolatePlatform* platform,
ArrayBufferAllocator* allocator) {
- return new IsolateData(
- isolate,
- loop,
- platform,
- allocator != nullptr ? allocator->zero_fill_field() : nullptr);
+ return new IsolateData(isolate, loop, platform, allocator);
}
void FreeIsolateData(IsolateData* isolate_data) {
diff --git a/src/env-inl.h b/src/env-inl.h
index aca8176056..51c7e0d7b0 100644
--- a/src/env-inl.h
+++ b/src/env-inl.h
@@ -49,8 +49,16 @@ inline uv_loop_t* IsolateData::event_loop() const {
return event_loop_;
}
-inline uint32_t* IsolateData::zero_fill_field() const {
- return zero_fill_field_;
+inline bool IsolateData::uses_node_allocator() const {
+ return uses_node_allocator_;
+}
+
+inline v8::ArrayBuffer::Allocator* IsolateData::allocator() const {
+ return allocator_;
+}
+
+inline ArrayBufferAllocator* IsolateData::node_allocator() const {
+ return node_allocator_;
}
inline MultiIsolatePlatform* IsolateData::platform() const {
diff --git a/src/env.cc b/src/env.cc
index 01aee46440..b7b6d745d8 100644
--- a/src/env.cc
+++ b/src/env.cc
@@ -74,11 +74,14 @@ void* const Environment::kNodeContextTagPtr = const_cast<void*>(
IsolateData::IsolateData(Isolate* isolate,
uv_loop_t* event_loop,
MultiIsolatePlatform* platform,
- uint32_t* zero_fill_field) :
- isolate_(isolate),
- event_loop_(event_loop),
- zero_fill_field_(zero_fill_field),
- platform_(platform) {
+ ArrayBufferAllocator* node_allocator)
+ : isolate_(isolate),
+ event_loop_(event_loop),
+ allocator_(isolate->GetArrayBufferAllocator()),
+ node_allocator_(node_allocator),
+ uses_node_allocator_(allocator_ == node_allocator_),
+ platform_(platform) {
+ CHECK_NOT_NULL(allocator_);
if (platform_ != nullptr)
platform_->RegisterIsolate(isolate_, event_loop);
diff --git a/src/env.h b/src/env.h
index 5f578dd54a..527a28f695 100644
--- a/src/env.h
+++ b/src/env.h
@@ -394,16 +394,20 @@ class Environment;
class IsolateData {
public:
- IsolateData(v8::Isolate* isolate, uv_loop_t* event_loop,
+ IsolateData(v8::Isolate* isolate,
+ uv_loop_t* event_loop,
MultiIsolatePlatform* platform = nullptr,
- uint32_t* zero_fill_field = nullptr);
+ ArrayBufferAllocator* node_allocator = nullptr);
~IsolateData();
inline uv_loop_t* event_loop() const;
- inline uint32_t* zero_fill_field() const;
inline MultiIsolatePlatform* platform() const;
inline std::shared_ptr<PerIsolateOptions> options();
inline void set_options(std::shared_ptr<PerIsolateOptions> options);
+ inline bool uses_node_allocator() const;
+ inline v8::ArrayBuffer::Allocator* allocator() const;
+ inline ArrayBufferAllocator* node_allocator() const;
+
#define VP(PropertyName, StringValue) V(v8::Private, PropertyName)
#define VY(PropertyName, StringValue) V(v8::Symbol, PropertyName)
#define VS(PropertyName, StringValue) V(v8::String, PropertyName)
@@ -436,7 +440,9 @@ class IsolateData {
v8::Isolate* const isolate_;
uv_loop_t* const event_loop_;
- uint32_t* const zero_fill_field_;
+ v8::ArrayBuffer::Allocator* const allocator_;
+ ArrayBufferAllocator* const node_allocator_;
+ const bool uses_node_allocator_;
MultiIsolatePlatform* platform_;
std::shared_ptr<PerIsolateOptions> options_;