public void FreeArena(MemoryMappedFileArena memoryMappedFileArena)
 {
     lock (_allocatedArenas)
     {
         _allocatedArenas.Remove(memoryMappedFileArena);
     }
 }
            public MemoryMappedInfo(MemoryMappedFile memoryMappedFile, long offset, long size, MemoryMappedFileArena containingArena)
            {
                _memoryMappedFile = memoryMappedFile;
                _offset           = offset;
                _size             = size;
                _containingArena  = containingArena;

                _streamCount = 0;
                _accessor    = null;
            }
            public MemoryMappedInfo(MemoryMappedFile memoryMappedFile, long offset, long size, MemoryMappedFileArena containingArena)
            {
                this.memoryMappedFile = memoryMappedFile;
                this.offset           = offset;
                this.size             = size;
                this.containingArena  = containingArena;

                this.streamCount = 0;
                this.accessor    = null;
            }
            public MemoryMappedInfo CreateViewInfo(long size)
            {
                List <MemoryMappedFileArena> storage = null;
                int allocationSize;

                if (size <= SmallFileMaxBytes)
                {
                    storage        = _smallFileStorage;
                    allocationSize = SmallFileMaxBytes;
                }
                else if (size <= MediumFileMaxBytes)
                {
                    storage        = _mediumFileStorage;
                    allocationSize = MediumFileMaxBytes;
                }
                else if (size <= LargeFileMaxBytes)
                {
                    storage        = _largeFileStorage;
                    allocationSize = LargeFileMaxBytes;
                }
                else if (size <= HugeFileMaxBytes)
                {
                    storage        = _hugeFileStorage;
                    allocationSize = HugeFileMaxBytes;
                }
                else
                {
                    // The requested size is larger than HugeFileMaxBytes, give it its own MemoryMappedFile
                    return(new MemoryMappedInfo(MemoryMappedFile.CreateNew(CreateUniqueName(size), size), size));
                }

                // Lock this list since we may be inserting a new element.  MemoryMappedFileArena may also
                // add/remove items from the list.  To avoid deadlocks, lock on this List<MemoryMappedFileArena>
                // first, then MemoryMappedFileArena.gate, and lock allocatedArenas last of all.
                lock (storage)
                {
                    if (storage.Count == 0)
                    {
                        var arena = new MemoryMappedFileArena(this, storage, allocationSize);
                        storage.Add(arena);
                        lock (_allocatedArenas)
                        {
                            _allocatedArenas.Add(arena);
                        }
                    }

                    return(storage[0].CreateMemoryMappedViewInfo(size));
                }
            }
            public MemoryMappedInfo CreateViewInfo(long size)
            {
                List<MemoryMappedFileArena> storage = null;
                int allocationSize;

                if (size <= SmallFileMaxBytes)
                {
                    storage = _smallFileStorage;
                    allocationSize = SmallFileMaxBytes;
                }
                else if (size <= MediumFileMaxBytes)
                {
                    storage = _mediumFileStorage;
                    allocationSize = MediumFileMaxBytes;
                }
                else if (size <= LargeFileMaxBytes)
                {
                    storage = _largeFileStorage;
                    allocationSize = LargeFileMaxBytes;
                }
                else if (size <= HugeFileMaxBytes)
                {
                    storage = _hugeFileStorage;
                    allocationSize = HugeFileMaxBytes;
                }
                else
                {
                    // The requested size is larger than HugeFileMaxBytes, give it its own MemoryMappedFile
                    return new MemoryMappedInfo(MemoryMappedFile.CreateNew(CreateUniqueName(size), size), size);
                }

                // Lock this list since we may be inserting a new element.  MemoryMappedFileArena may also
                // add/remove items from the list.  To avoid deadlocks, lock on this List<MemoryMappedFileArena>
                // first, then MemoryMappedFileArena.gate, and lock allocatedArenas last of all.
                lock (storage)
                {
                    if (storage.Count == 0)
                    {
                        var arena = new MemoryMappedFileArena(this, storage, allocationSize);
                        storage.Add(arena);
                        lock (_allocatedArenas)
                        {
                            _allocatedArenas.Add(arena);
                        }
                    }

                    return storage[0].CreateMemoryMappedViewInfo(size);
                }
            }
            public MemoryMappedInfo(MemoryMappedFile memoryMappedFile, long offset, long size, MemoryMappedFileArena containingArena)
            {
                _memoryMappedFile = memoryMappedFile;
                _offset = offset;
                _size = size;
                _containingArena = containingArena;

                _streamCount = 0;
                _accessor = null;
            }
 public void FreeArena(MemoryMappedFileArena memoryMappedFileArena)
 {
     lock (_allocatedArenas)
     {
         _allocatedArenas.Remove(memoryMappedFileArena);
     }
 }
            public MemoryMappedInfo(MemoryMappedFile memoryMappedFile, long offset, long size, MemoryMappedFileArena containingArena)
            {
                this.memoryMappedFile = memoryMappedFile;
                this.offset = offset;
                this.size = size;
                this.containingArena = containingArena;

                this.streamCount = 0;
                this.accessor = null;
            }