Browse Source

smalloc: prevent double free on dispose()

dispose() free's the memory when executed and sets the external array
data to NULL and length to zero.

To prevent the same memory from being free'd twice when the object is
garbage collected we first check if the object's external array data
length == 0. Since alloc() passes NULL to
SetIndexedPropertiesToExternalArrayData() if length == 0 there's no
opportunity for memory leak.
archived-io.js-v0.10
Trevor Norris 11 years ago
parent
commit
681013223f
  1. 3
      src/smalloc.cc

3
src/smalloc.cc

@ -157,8 +157,9 @@ Free::Free(char* data) : data_(data) {
void Free::WeakCallback(Isolate* isolate, void Free::WeakCallback(Isolate* isolate,
Local<Object> object, Local<Object> object,
CallbackInfo<Free>* info) { CallbackInfo<Free>* info) {
free(data_);
size_t length = object->GetIndexedPropertiesExternalArrayDataLength(); size_t length = object->GetIndexedPropertiesExternalArrayDataLength();
if (length > 0)
free(data_);
enum ExternalArrayType array_type = enum ExternalArrayType array_type =
object->GetIndexedPropertiesExternalArrayDataType(); object->GetIndexedPropertiesExternalArrayDataType();
size_t array_size = ExternalArraySize(array_type); size_t array_size = ExternalArraySize(array_type);

Loading…
Cancel
Save