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 {
}
/**
* Free the memory pointed to |data|. That memory is guaranteed to be
* previously allocated by |Allocate|.
* Free the memory block of size |length|, pointed to by |data|.
* 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) {
}
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) {
i::Handle<i::Object> obj = Utils::OpenHandle(that);
ApiCheck(obj->IsJSArrayBufferView(),
......
......@@ -1635,7 +1635,13 @@ class ShellArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
virtual void* AllocateUninitialized(size_t 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,
isolate->heap()->AdjustAmountOfExternalAllocatedMemory(
-static_cast<intptr_t>(allocated_length));
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_;
class CcTestArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
public:
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