Memory Leak in Memo Field
Posted by jboden on 2002-07-18 11:05:00
There is a memory leak that fails to release memory assigned when a memo buffer is released. In the existing code, the memory is only released if the memo contents are changed.
status: CLOSED Urgency: MEDIUM As Of: 2002-07-18 11:05:00
Comment:
Replace the following method in Halcn6db.pas:
destructor THCBlobStream.Destroy;
var
msiz: longint;
begin
try
if FModified and (FDataset.State in [dsEdit, dsInsert]) then
begin
FDataset.SetCurRecord(FDataSet.ActiveBuffer);
if FMemory = nil then
begin
GetMem(FMemory,4);
FMemory[0] := #0;
FMemorySize := 3;
FPosition := 0;
msiz := 0;
end
else
begin
msiz := Size;
if FField.Transliterate then
begin
FDataSet.Translate(FMemory, FMemory, True);
end;
end;
FDataSet.DBFHandle.gsMemoSaveN(FFieldNo, FMemory, msiz);
FDataSet.RestoreCurRecord;
FField.Modified := True;
FDataSet.DataEvent(deFieldChange, Longint(FField));
end;
finally
if FMemory <> nil then
begin
FreeMem(FMemory,FMemorySize+1);
FMemorySize := 0;
FPosition := 0;
FMemory := nil;
end;
end;
end;

