private static IDisposable[] GetDisposables(IRollingMemory rollingMemory, bool disposeOfRollingMemoryOnDispose)
        {
            if (disposeOfRollingMemoryOnDispose)
            {
                return new IDisposable[] { rollingMemory };
            }

            return null;
        }
 public BlockingWriteRollingMemory(Func<IRollingMemoryStateMonitor, IRollingMemory> targetFactory,
     IRollingMemoryStateMonitor rollingMemoryStateMonitor,
     long blockWritesAboveLagBytes)
 {
     var lagCountingRollingMemoryStateMonitor = new LagCountingRollingMemoryStateMonitor();
     rollingMemoryStateMonitor = new CompositeRollingMemoryStateMonitor(rollingMemoryStateMonitor, lagCountingRollingMemoryStateMonitor);
     _target = targetFactory(rollingMemoryStateMonitor);
     _writeStream = new BlockForCapacityWriteStream(
         _target.WriteStream,
         () => blockWritesAboveLagBytes - lagCountingRollingMemoryStateMonitor.Lag,
         lagCountingRollingMemoryStateMonitor.WaitForLagChange,
         lagCountingRollingMemoryStateMonitor.AcquireLagChangeLock,
         lagCountingRollingMemoryStateMonitor.ReleaseLagChangeLock
     );
 }
Example #3
0
 public static RollingMemoryStream CreateRollingMemoryStream(IRollingMemory rollingMemory, bool disposeOfRollingMemoryOnDispose)
 {
     return new RollingMemoryStream(rollingMemory, disposeOfRollingMemoryOnDispose);
 }
 public RollingMemoryStream(IRollingMemory rollingMemory, bool disposeOfRollingMemoryOnDispose)
     : base(rollingMemory.ReadStream, rollingMemory.WriteStream, rollingMemory.ReadStream, GetDisposables(rollingMemory, disposeOfRollingMemoryOnDispose))
 {
     _rollingMemory = rollingMemory;
 }