diff options
author | Anna Henningsen <anna@addaleax.net> | 2019-02-18 17:30:42 +0100 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2019-02-25 02:00:44 +0100 |
commit | 5c0e18fd407ec5766a8f326dbe3c870d3594ab7d (patch) | |
tree | 50a99eda8a25681e2aa5219aad9d7da8a98716a6 | |
parent | 23b075d051acf16711de40cb248bf142ab297d47 (diff) | |
download | android-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.cc | 6 | ||||
-rw-r--r-- | src/env-inl.h | 12 | ||||
-rw-r--r-- | src/env.cc | 13 | ||||
-rw-r--r-- | src/env.h | 14 |
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); @@ -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_; |