Commit 5230c19d authored by dslomov@chromium.org's avatar dslomov@chromium.org

Add size_t length argument to v8::ArrayBuffer::Allocator::Free.

The previous implementation of Free is a deprecated overload now.

R=mstarzinger@chromium.org

Committed: https://code.google.com/p/v8/source/detail?r=16031

Review URL: https://codereview.chromium.org/21803002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16033 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent f8b80ca6
...@@ -2425,10 +2425,20 @@ class V8EXPORT ArrayBuffer : public Object { ...@@ -2425,10 +2425,20 @@ class V8EXPORT ArrayBuffer : public Object {
} }
/** /**
* Free the memory pointed to |data|. That memory is guaranteed to be * Free the memory block of size |length|, pointed to by |data|.
* previously allocated by |Allocate|. * That memory is guaranteed to be previously allocated by |Allocate|.
*/ */
virtual void Free(void* data) = 0; virtual void Free(void* data, size_t length) {
// Override with call to |Free(void*)| for compatibility
// with legacy version.
Free(data);
}
/**
* Deprecated. Never called directly by V8.
* For compatibility with legacy version of this interface.
*/
virtual void Free(void* data);
}; };
/** /**
......
...@@ -3071,6 +3071,12 @@ void v8::ArrayBuffer::CheckCast(Value* that) { ...@@ -3071,6 +3071,12 @@ void v8::ArrayBuffer::CheckCast(Value* that) {
} }
void v8::ArrayBuffer::Allocator::Free(void* data) {
API_Fatal("v8::ArrayBuffer::Allocator::Free",
"Override Allocator::Free(void*, size_t)");
}
void v8::ArrayBufferView::CheckCast(Value* that) { void v8::ArrayBufferView::CheckCast(Value* that) {
i::Handle<i::Object> obj = Utils::OpenHandle(that); i::Handle<i::Object> obj = Utils::OpenHandle(that);
ApiCheck(obj->IsJSArrayBufferView(), ApiCheck(obj->IsJSArrayBufferView(),
......
...@@ -1635,7 +1635,13 @@ class ShellArrayBufferAllocator : public v8::ArrayBuffer::Allocator { ...@@ -1635,7 +1635,13 @@ class ShellArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
virtual void* AllocateUninitialized(size_t length) { virtual void* AllocateUninitialized(size_t length) {
return malloc(length); return malloc(length);
} }
virtual void Free(void* data) { free(data); } virtual void Free(void* data, size_t) { free(data); }
// TODO(dslomov): Remove when v8:2823 is fixed.
virtual void Free(void* data) {
#ifndef V8_SHARED
UNREACHABLE();
#endif
}
}; };
......
...@@ -689,7 +689,9 @@ void Runtime::FreeArrayBuffer(Isolate* isolate, ...@@ -689,7 +689,9 @@ void Runtime::FreeArrayBuffer(Isolate* isolate,
isolate->heap()->AdjustAmountOfExternalAllocatedMemory( isolate->heap()->AdjustAmountOfExternalAllocatedMemory(
-static_cast<intptr_t>(allocated_length)); -static_cast<intptr_t>(allocated_length));
CHECK(V8::ArrayBufferAllocator() != NULL); CHECK(V8::ArrayBufferAllocator() != NULL);
V8::ArrayBufferAllocator()->Free(phantom_array_buffer->backing_store()); V8::ArrayBufferAllocator()->Free(
phantom_array_buffer->backing_store(),
allocated_length);
} }
......
...@@ -99,9 +99,10 @@ v8::Isolate* CcTest::default_isolate_; ...@@ -99,9 +99,10 @@ v8::Isolate* CcTest::default_isolate_;
class CcTestArrayBufferAllocator : public v8::ArrayBuffer::Allocator { class CcTestArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
public:
virtual void* Allocate(size_t length) { return malloc(length); } virtual void* Allocate(size_t length) { return malloc(length); }
virtual void Free(void* data) { free(data); } virtual void Free(void* data, size_t length) { free(data); }
// TODO(dslomov): Remove when v8:2823 is fixed.
virtual void Free(void* data) { UNREACHABLE(); }
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment