83 lines
4.1 KiB
Diff
83 lines
4.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Shelley Vohr <shelley.vohr@gmail.com>
|
|
Date: Thu, 20 Sep 2018 17:44:26 -0700
|
|
Subject: add_realloc.patch
|
|
|
|
Blink overrides ArrayBuffer's allocator with its own one, while Node simply
|
|
uses malloc and free, so we need to use v8's allocator in Node. As part of the
|
|
10.6.0 upgrade, we needed to make SerializerDelegate accept an allocator
|
|
argument in its constructor, and override ReallocateBufferMemory and
|
|
FreeBufferMemory to use the allocator. We cannot simply allocate and then memcpy
|
|
when we override ReallocateBufferMemory, so we therefore need to implement
|
|
Realloc on the v8 side and correspondingly in gin.
|
|
|
|
diff --git a/gin/array_buffer.cc b/gin/array_buffer.cc
|
|
index 210760801f1d027196111631d34bab3eb5a10792..cdfdf91841b5f2feb248b0c5890ddcfdb5a8f9ce 100644
|
|
--- a/gin/array_buffer.cc
|
|
+++ b/gin/array_buffer.cc
|
|
@@ -37,6 +37,10 @@ void* ArrayBufferAllocator::AllocateUninitialized(size_t length) {
|
|
return malloc(length);
|
|
}
|
|
|
|
+void* ArrayBufferAllocator::Realloc(void* data, size_t length) {
|
|
+ return realloc(data, length);
|
|
+}
|
|
+
|
|
void ArrayBufferAllocator::Free(void* data, size_t length) {
|
|
free(data);
|
|
}
|
|
diff --git a/gin/array_buffer.h b/gin/array_buffer.h
|
|
index 086371af29bd8c7520485125deddca411e8b978b..2c6886ddcc47019be4d552d4fddfc1c3d00cbca0 100644
|
|
--- a/gin/array_buffer.h
|
|
+++ b/gin/array_buffer.h
|
|
@@ -21,6 +21,7 @@ class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
|
|
public:
|
|
void* Allocate(size_t length) override;
|
|
void* AllocateUninitialized(size_t length) override;
|
|
+ void* Realloc(void* data, size_t length) override;
|
|
void Free(void* data, size_t length) override;
|
|
|
|
GIN_EXPORT static ArrayBufferAllocator* SharedInstance();
|
|
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
|
|
index b7509d4f4a47987ac8f4e2ae3fdcb29d20b3d484..c05209010570867a8c08a60c2b32f853906bd03d 100644
|
|
--- a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
|
|
+++ b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
|
|
@@ -699,6 +699,10 @@ class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
|
|
return result;
|
|
}
|
|
|
|
+ void* Realloc(void* data, size_t size) override {
|
|
+ return ArrayBufferContents::Realloc(data, size);
|
|
+ }
|
|
+
|
|
void Free(void* data, size_t size) override {
|
|
if (max_allocation_ != 0 && data)
|
|
total_allocation_.fetch_sub(size, std::memory_order_relaxed);
|
|
diff --git a/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.cc b/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.cc
|
|
index ec217020077613d72eee4b5c408bd5e9eda2ae47..7ab2fa4d00eca9d4896653e29c98654ff75d4306 100644
|
|
--- a/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.cc
|
|
+++ b/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.cc
|
|
@@ -149,6 +149,11 @@ void* ArrayBufferContents::AllocateMemoryOrNull(size_t size,
|
|
return AllocateMemoryWithFlags(size, policy, base::PartitionAllocReturnNull);
|
|
}
|
|
|
|
+void* ArrayBufferContents::Realloc(void* data, size_t size) {
|
|
+ return WTF::Partitions::ArrayBufferPartition()->Realloc(data, size,
|
|
+ WTF_HEAP_PROFILER_TYPE_NAME(ArrayBufferContents));
|
|
+}
|
|
+
|
|
void ArrayBufferContents::FreeMemory(void* data) {
|
|
InstanceCounters::DecrementCounter(
|
|
InstanceCounters::kArrayBufferContentsCounter);
|
|
diff --git a/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.h b/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.h
|
|
index cce802e4fc94c258607bc943d9902e6d18173c44..4f7f4eaf005aac701360e567e6faca7f2e0ff3da 100644
|
|
--- a/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.h
|
|
+++ b/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.h
|
|
@@ -108,6 +108,7 @@ class CORE_EXPORT ArrayBufferContents {
|
|
void CopyTo(ArrayBufferContents& other);
|
|
|
|
static void* AllocateMemoryOrNull(size_t, InitializationPolicy);
|
|
+ static void* Realloc(void* data, size_t);
|
|
static void FreeMemory(void*);
|
|
|
|
private:
|