diff --git a/res/modules/internal/bytearray.lua b/res/modules/internal/bytearray.lua index bc0907869..58b33a520 100644 --- a/res/modules/internal/bytearray.lua +++ b/res/modules/internal/bytearray.lua @@ -12,6 +12,8 @@ FFI.cdef[[ } bytearray_t; ]] +local free = FFI.C.free + local FFIBytearray local bytearray_type @@ -31,7 +33,7 @@ local function malloc(size) allocated_bytes = 0 end - return FFI.gc(raw, FFI.C.free) + return raw end local function grow_buffer(self, elems) @@ -40,6 +42,7 @@ local function grow_buffer(self, elems) self.bytes = malloc(new_capacity) FFI.copy(self.bytes, prev, self.size) self.capacity = new_capacity + free(prev) end local function trim_buffer(self) @@ -51,6 +54,7 @@ local function trim_buffer(self) self.bytes = malloc(size) FFI.copy(self.bytes, prev, self.size) self.capacity = size + free(prev) end local function count_elements(b) @@ -129,6 +133,7 @@ local function reserve(self, new_capacity) self.bytes = malloc(new_capacity) FFI.copy(self.bytes, prev, self.size) self.capacity = new_capacity + free(prev) end local function get_capacity(self) @@ -187,7 +192,9 @@ local bytearray_mt = { __len = function(self) return tonumber(self.size) end, - __gc = function(self) end, + __gc = function(self) + free(self.bytes) + end, __ipairs = function(self) local i = 0 return function()