Exemplo n.º 1
0
        public Stream IncreaseSize(int value, out long offset)
        {
            lock (_lock)
            {
                while (Interlocked.Read(ref _counter) != 0)
                {
                    if (!Monitor.Wait(_lock, 10000, true))
                        throw new NotSupportedException();
                }

                FileStream file = new FileStream(_filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
                try
                {
                    offset = MathEx.RoundUp(file.Length, 0x800);
                    file.SetLength(offset + value);
                    _mmf = MemoryMappedFile.CreateFromFile(file, null, 0, MemoryMappedFileAccess.ReadWrite, null, HandleInheritability.Inheritable, false);
                }
                catch
                {
                    file.SafeDispose();
                    throw;
                }

                Interlocked.Increment(ref _counter);
                DisposableStream result = new DisposableStream(_mmf.CreateViewStream(offset, value, MemoryMappedFileAccess.ReadWrite));
                result.AfterDispose.Add(new DisposableAction(Free));
                return result;
            }
        }
Exemplo n.º 2
0
 public Stream CreateViewStream()
 {
     IDisposable context = Acquire();
     DisposableStream result = new DisposableStream(_mmf.CreateViewStream(0L, 0L, MemoryMappedFileAccess.ReadWrite));
     result.AfterDispose.Add(context);
     return result;
 }
Exemplo n.º 3
0
 public Stream CreateViewStream(long offset, long size, MemoryMappedFileAccess access)
 {
     IDisposable context = Acquire();
     DisposableStream result = new DisposableStream(_mmf.CreateViewStream(offset, size, access));
     result.AfterDispose.Add(context);
     return result;
 }
Exemplo n.º 4
0
        public Stream IncreaseSize(int value, out long offset)
        {
            lock (_lock)
            {
                while (Interlocked.Read(ref _counter) != 0)
                {
                    if (!Monitor.Wait(_lock, 10000, true))
                    {
                        throw new NotSupportedException();
                    }
                }

                FileStream file = new FileStream(_filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
                try
                {
                    offset = MathEx.RoundUp(file.Length, 0x800);
                    file.SetLength(offset + value);
                    _mmf = MemoryMappedFile.CreateFromFile(file, null, 0, MemoryMappedFileAccess.ReadWrite, null, HandleInheritability.Inheritable, false);
                }
                catch
                {
                    file.SafeDispose();
                    throw;
                }

                Interlocked.Increment(ref _counter);
                DisposableStream result = new DisposableStream(_mmf.CreateViewStream(offset, value, MemoryMappedFileAccess.ReadWrite));
                result.AfterDispose.Add(new DisposableAction(Free));
                return(result);
            }
        }
Exemplo n.º 5
0
        public Stream CreateViewStream(long offset, long size, MemoryMappedFileAccess access)
        {
            IDisposable      context = Acquire();
            DisposableStream result  = new DisposableStream(_mmf.CreateViewStream(offset, size, access));

            result.AfterDispose.Add(context);
            return(result);
        }
Exemplo n.º 6
0
 private Stream Acquire(Stream stream)
 {
     try
     {
         Interlocked.Increment(ref _counter);
         DisposableStream result = new DisposableStream(stream);
         result.AfterDispose.Add(new DisposableAction(Dispose));
         return(result);
     }
     catch
     {
         stream.SafeDispose();
         throw;
     }
 }
Exemplo n.º 7
0
 private Stream Acquire(Stream stream)
 {
     try
     {
         Interlocked.Increment(ref _counter);
         DisposableStream result = new DisposableStream(stream);
         result.AfterDispose.Add(new DisposableAction(Dispose));
         return result;
     }
     catch
     {
         stream.SafeDispose();
         throw;
     }
 }
Exemplo n.º 8
0
Arquivo: Flute.cs Projeto: kidaa/Pulse
        public static void CreatePipe(long capacity, out Stream input, out Stream output)
        {
            using (DisposableStack insurance = new DisposableStack(3))
            {
                Flute flute = insurance.Add(new Flute(capacity));
                Stream writer = insurance.Add(flute.AcquireWriter(0, capacity));
                Stream reader = insurance.Add(flute.AcquireReader(0, capacity));

                DisposableStream disposableOutput = new DisposableStream(reader);
                disposableOutput.AfterDispose.Add(flute);
                disposableOutput.AfterDispose.Add(writer);

                input = writer;
                output = disposableOutput;

                insurance.Clear();
            }
        }
Exemplo n.º 9
0
        public static void CreatePipe(long capacity, out Stream input, out Stream output)
        {
            using (DisposableStack insurance = new DisposableStack(3))
            {
                Flute  flute  = insurance.Add(new Flute(capacity));
                Stream writer = insurance.Add(flute.AcquireWriter(0, capacity));
                Stream reader = insurance.Add(flute.AcquireReader(0, capacity));

                DisposableStream disposableOutput = new DisposableStream(reader);
                disposableOutput.AfterDispose.Add(flute);
                disposableOutput.AfterDispose.Add(writer);

                input  = writer;
                output = disposableOutput;

                insurance.Clear();
            }
        }
Exemplo n.º 10
0
        private Stream OpenOutputStream(ArchiveEntry entry)
        {
            MemoryStream ms = new MemoryStream((int)(entry.UncompressedSize * 1.3));

            DisposableStream writer = new DisposableStream(ms);
            writer.BeforeDispose.Add(new DisposableAction(() => _listing.Accessor.OnWritingCompleted(entry, ms, _compression)));

            return writer;
        }