| Index: gin/array_buffer.cc
|
| diff --git a/gin/array_buffer.cc b/gin/array_buffer.cc
|
| index ee9f2a5867b21a970daec17881ba4411a2631762..42948a7882580ff87982b708659dead5e83d1420 100644
|
| --- a/gin/array_buffer.cc
|
| +++ b/gin/array_buffer.cc
|
| @@ -2,10 +2,11 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "gin/array_buffer.h"
|
| -
|
| #include <stdlib.h>
|
|
|
| +#include "gin/array_buffer.h"
|
| +#include "gin/per_isolate_data.h"
|
| +
|
| namespace gin {
|
|
|
| COMPILE_ASSERT(V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT == 2,
|
| @@ -72,6 +73,7 @@ class ArrayBuffer::Private : public base::RefCounted<ArrayBuffer::Private> {
|
|
|
| v8::Persistent<v8::ArrayBuffer> array_buffer_;
|
| scoped_refptr<Private> self_reference_;
|
| + v8::Isolate* isolate_;
|
| void* buffer_;
|
| size_t length_;
|
| };
|
| @@ -87,8 +89,9 @@ scoped_refptr<ArrayBuffer::Private> ArrayBuffer::Private::From(
|
|
|
| ArrayBuffer::Private::Private(v8::Isolate* isolate,
|
| v8::Handle<v8::ArrayBuffer> array)
|
| - : array_buffer_(isolate, array) {
|
| + : array_buffer_(isolate, array), isolate_(isolate) {
|
| // Take ownership of the array buffer.
|
| + CHECK(!array->IsExternal());
|
| v8::ArrayBuffer::Contents contents = array->Externalize();
|
| buffer_ = contents.Data();
|
| length_ = contents.ByteLength();
|
| @@ -100,7 +103,7 @@ ArrayBuffer::Private::Private(v8::Isolate* isolate,
|
| }
|
|
|
| ArrayBuffer::Private::~Private() {
|
| - ArrayBufferAllocator::SharedInstance()->Free(buffer_, length_);
|
| + PerIsolateData::From(isolate_)->allocator()->Free(buffer_, length_);
|
| }
|
|
|
| void ArrayBuffer::Private::WeakCallback(
|
|
|