Утечка была в функции TBerkeleyDB.Read, кому сильно мешает и невтерпёж, можете пофиксить сами:
Код: Выделить всё
function TBerkeleyDB.Read(
AKey: Pointer;
AKeySize: Cardinal;
out AData: Pointer;
out ADataSize: Cardinal
): Boolean;
var
dbtKey, dbtData: DBT;
begin
FCS.Acquire;
try
Result := False;
if FDBEnabled then begin
FillChar(dbtKey, Sizeof(DBT), 0);
FillChar(dbtData, Sizeof(DBT), 0);
dbtKey.data := AKey;
dbtKey.size := AKeySize;
if (FDB.open_flags and DB_THREAD = DB_THREAD) then begin
dbtData.flags := DB_DBT_MALLOC;
end;
Result := CheckAndFoundBDB(FDB.get(FDB, nil, @dbtKey, @dbtData, 0));
if Result and (dbtData.data <> nil) and (dbtData.size > 0) then begin
ADataSize := dbtData.size;
GetMem(AData, ADataSize);
Move(dbtData.data^, AData^, dbtData.size);
//--fix
FreeMem(dbtData.data);
dbtData.data := nil;
dbtData.size := 0;
//--fix
end;
end;
finally
FCS.Release;
end;
end;