Microsoft.AspNet.Server.Kestrel.Infrastructure.MemoryPool2.AllocateSlab C# (CSharp) Method

AllocateSlab() private method

Internal method called when a block is requested and the pool is empty. It allocates one additional slab, creates all of the block tracking objects, and adds them all to the pool.
private AllocateSlab ( ) : void
return void
        private void AllocateSlab()
        {
            var slab = MemoryPoolSlab2.Create(_slabLength);
            _slabs.Push(slab);

            var basePtr = slab.ArrayPtr;
            var firstOffset = (int)((_blockStride - 1) - ((ulong)(basePtr + _blockStride - 1) % _blockStride));

            for (var offset = firstOffset;
                offset + _blockLength <= _slabLength;
                offset += _blockStride)
            {
                var block = MemoryPoolBlock2.Create(
                    new ArraySegment<byte>(slab.Array, offset, _blockLength),
                    basePtr,
                    this,
                    slab);
                Return(block);
            }
        }