Ver código fonte

fix small memory leak

Johann 6 anos atrás
pai
commit
6d2b7b408e

+ 1 - 3
lazpaint/image/uimagediff.pas

@@ -165,7 +165,6 @@ type
     useOriginal: boolean;
     previousOriginalRenderStatus: TOriginalRenderStatus;
     layerId: integer;
-    FDestination: TState;
     previousLayerOffset: TPoint;
   protected
     function GetImageDifferenceKind: TImageDifferenceKind; override;
@@ -1423,9 +1422,8 @@ var idx: integer;
   clippedImage: TBGRABitmap;
 begin
   inherited Create(ADestination);
-  FDestination := ADestination;
   layerId:= ALayerId;
-  layers := (FDestination as TImageState).LayeredBitmap;
+  layers := (ADestination as TImageState).LayeredBitmap;
   idx := layers.GetLayerIndexFromId(ALayerId);
   if idx = -1 then raise exception.Create('Invalid layer Id');
   nextBounds := rect(0,0,layers.Width,layers.Height);

+ 2 - 1
lazpaint/image/ulayeraction.pas

@@ -665,7 +665,8 @@ begin
         if Assigned(FPrediff) then
         begin
           composedDiff.AddRange(FPrediff);
-          FPrediff := nil;
+          FPrediff.ReleaseDiffs;
+          FreeAndNil(FPrediff);
         end;
         if rasterizeOriginal then
           composedDiff.Add(TDiscardOriginalDifference.Create(CurrentState,

+ 8 - 0
lazpaint/image/ustatetype.pas

@@ -72,6 +72,7 @@ type
     function GetChangingBoundsDefined: boolean; override;
   public
     constructor Create;
+    procedure ReleaseDiffs;
     destructor Destroy; override;
     function TryCompress: boolean; override;
     function UsedMemory: int64; override;
@@ -459,6 +460,13 @@ begin
   FDiffs := TImageDifferenceList.Create;
 end;
 
+procedure TComposedImageDifference.ReleaseDiffs;
+begin
+  FDiffs.FreeObjects:= false;
+  FDiffs.Clear;
+  FDiffs.FreeObjects:= true;
+end;
+
 destructor TComposedImageDifference.Destroy;
 begin
   FDiffs.Free;