Browse Source

* Patch from Mek to kill memleak while inserting, Mantis #18004

git-svn-id: trunk@20531 -
marco 13 years ago
parent
commit
a6fd41b1d1
1 changed files with 5 additions and 1 deletions
  1. 5 1
      packages/fcl-db/src/base/bufdataset.pas

+ 5 - 1
packages/fcl-db/src/base/bufdataset.pas

@@ -1899,7 +1899,9 @@ var i         : Integer;
     StartInd  : Integer;
     StartInd  : Integer;
     RemRec    : pointer;
     RemRec    : pointer;
     RemRecBookmrk : TBufBookmark;
     RemRecBookmrk : TBufBookmark;
+    free_rec: Boolean;
 begin
 begin
+  free_rec := False;
   InternalSetToRecord(ActiveBuffer);
   InternalSetToRecord(ActiveBuffer);
   // Remove the record from all active indexes
   // Remove the record from all active indexes
   FCurrentIndex.StoreCurrentRecIntoBookmark(@RemRecBookmrk);
   FCurrentIndex.StoreCurrentRecIntoBookmark(@RemRecBookmrk);
@@ -1921,11 +1923,13 @@ begin
     begin
     begin
     if FUpdateBuffer[FCurrentUpdateBuffer].UpdateKind <> ukModify then
     if FUpdateBuffer[FCurrentUpdateBuffer].UpdateKind <> ukModify then
       FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer := nil;  //this 'disables' the updatebuffer
       FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer := nil;  //this 'disables' the updatebuffer
+    free_rec := FUpdateBuffer[FCurrentUpdateBuffer].UpdateKind = ukInsert; // mantis #18004
     end;
     end;
   FCurrentIndex.StoreCurrentRecIntoBookmark(@FUpdateBuffer[FCurrentUpdateBuffer].NextBookmarkData);
   FCurrentIndex.StoreCurrentRecIntoBookmark(@FUpdateBuffer[FCurrentUpdateBuffer].NextBookmarkData);
   FUpdateBuffer[FCurrentUpdateBuffer].BookmarkData := RemRecBookmrk;
   FUpdateBuffer[FCurrentUpdateBuffer].BookmarkData := RemRecBookmrk;
   FUpdateBuffer[FCurrentUpdateBuffer].UpdateKind := ukDelete;
   FUpdateBuffer[FCurrentUpdateBuffer].UpdateKind := ukDelete;
-
+  if free_rec then
+    FreeRecordBuffer(TRecordBuffer(RemRecBookmrk.BookmarkData));
   dec(FBRecordCount);
   dec(FBRecordCount);
 end;
 end;