mirror of
https://github.com/zebrajr/node.git
synced 2025-12-07 12:20:50 +01:00
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.
This commit is contained in:
parent
32b4563280
commit
681013223f
|
|
@ -157,8 +157,9 @@ Free::Free(char* data) : data_(data) {
|
|||
void Free::WeakCallback(Isolate* isolate,
|
||||
Local<Object> object,
|
||||
CallbackInfo<Free>* info) {
|
||||
free(data_);
|
||||
size_t length = object->GetIndexedPropertiesExternalArrayDataLength();
|
||||
if (length > 0)
|
||||
free(data_);
|
||||
enum ExternalArrayType array_type =
|
||||
object->GetIndexedPropertiesExternalArrayDataType();
|
||||
size_t array_size = ExternalArraySize(array_type);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user