Довелось тут в очередной раз потыкать ноду и опять проблемы. Есть сишная либа которая умеет положить данные в память и передать указатель. Дергаю я её из ноды и получаю дикие утечки памяти. Десять раз проглядел все доки по ноде, но так и не понимаю почему течёт. Выделил минимальный сниппет.
var fs = require('fs');
var ref = require('ref');
var ffi = require('ffi');
var intPtr = ref.refType('int');
var ucharPtrPtr = ref.refType('uchar*');
var MyLib = ffi.Library('MyLib.dll', {
'GetData': ['bool', ['int', 'int', ucharPtrPtr, intPtr]],
'ReleaseBuffer': ['void', ['void**']]
})
for (i = 1; i < 100; i++) {
test();
}
function test() {
var dataPtr = ref.alloc(ucharPtrPtr);
var lengthPtr = ref.alloc('int');
var ret = MyLib.GetData(1, 1, dataPtr, lengthPtr);
var length = lengthPtr.deref();
var data = ref.reinterpret(ref.deref(dataPtr), length);
if (ret) {
var result = data.toString('base64');
console.log(result);
}
MyLib.ReleaseBuffer(dataPtr);
}
Куда смотреть, что делать?