anchor.diff:    LTickCount := TPlatform.GetTickCount;
     LPreviousCacheDataSize := FCacheDataSize;
     LPreviousCacheDataBlocks := FCacheDataBlocks;
  +  try
     {$ENDIF}
   
     if (AMaxMemSize<0) then LFinalMaxMemSize := FCacheDataSize
  
positive.code: 
  function TCacheMem.FreeMem(const AMaxMemSize, AMaxBlocks: Int64) : Boolean;
  var
    i, LTempCacheDataSize,
    LFinalMaxMemSize, LMaxPendingRounds : Int64;
    PToRemove, PToNext : PCacheMemData;
    LListToFlush : TOrderedList<PCacheMemData>;
  
negative.code:       PToNext := PToRemove^.used_next; // Capture now to avoid future PToRemove updates
        Dec(LTempCacheDataSize, Int64(PToRemove^.GetSize));
        if (PToRemove^.pendingToSave) then begin
          inc(LAuxCacheDataSize,Int64(PToRemove^.GetSize));
          // Add to list to flush
          if LListToFlush.Add(PToRemove)<0 then begin
            raise ECacheMem.Create(Format('Inconsistent error on Freemem cannot add pending to save: %s',[PToRemove.ToString]));
  