anchor.diff:  
     Result := (Result) And (FCacheDataSize <= AMaxMemSize);
     {$IFDEF ABSTRACTMEM_ENABLE_STATS}
  +  finally
     Inc(FCacheMemStats.freememCount);
     Inc(FCacheMemStats.freememSize,LPreviousCacheDataSize - FCacheDataSize);
     Inc(FCacheMemStats.freememBlocksCount,LPreviousCacheDataBlocks - FCacheDataBlocks);
     Inc(FCacheMemStats.freememElaspedMillis,TPlatform.GetElapsedMilliseconds(LTickCount));
  +  end;
     {$ENDIF}
   end;
   
  
positive.code:     // Delete not deleted previously
      for i:=0 to LListToFlush.Count-1 do begin
        PToRemove := LListToFlush.Get(i);
        Delete( PToRemove );
      end;
      //
      if (Result) and (LTempCacheDataSize <> FCacheDataSize) then raise ECacheMem.Create(Format('Inconsistent error on FreeMem Expected size %d <> obtained %d (save list %d)',[LTempCacheDataSize,FCacheDataSize,LListToFlush.Count]));
      if (Result) and (LMaxPendingRounds>0) then raise ECacheMem.Create(Format('Inconsistent error on FreeMem Expected Max Blocks %d <> obtained %d',[AMaxBlocks,FCacheDataBlocks]));
    finally
      LListToFlush.Free;
  
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]));
  