Merge branch 'release' into dev
This commit is contained in:
commit
0c1b05ce2d
|
|
@ -448,6 +448,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Infrastructure
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Buffer.BlockCopy(block.Array, index, array, offset, following);
|
Buffer.BlockCopy(block.Array, index, array, offset, following);
|
||||||
|
offset += following;
|
||||||
remaining -= following;
|
remaining -= following;
|
||||||
block = block.Next;
|
block = block.Next;
|
||||||
index = block.Start;
|
index = block.Start;
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,65 @@ namespace Microsoft.AspNet.Server.KestrelTests
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CopyToCorrectlyTraversesBlocks()
|
||||||
|
{
|
||||||
|
using (var pool = new MemoryPool2())
|
||||||
|
{
|
||||||
|
var block1 = pool.Lease(128);
|
||||||
|
var block2 = block1.Next = pool.Lease(128);
|
||||||
|
|
||||||
|
for (int i = 0; i < 128; i++)
|
||||||
|
{
|
||||||
|
block1.Array[block1.End++] = (byte)i;
|
||||||
|
}
|
||||||
|
for (int i = 128; i < 256; i++)
|
||||||
|
{
|
||||||
|
block2.Array[block2.End++] = (byte)i;
|
||||||
|
}
|
||||||
|
|
||||||
|
var beginIterator = block1.GetIterator();
|
||||||
|
|
||||||
|
var array = new byte[256];
|
||||||
|
int actual;
|
||||||
|
var endIterator = beginIterator.CopyTo(array, 0, 256, out actual);
|
||||||
|
|
||||||
|
Assert.Equal(256, actual);
|
||||||
|
|
||||||
|
for (int i = 0; i < 256; i++)
|
||||||
|
{
|
||||||
|
Assert.Equal(i, array[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
endIterator.CopyTo(array, 0, 256, out actual);
|
||||||
|
Assert.Equal(0, actual);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void IsEndCorrectlyTraversesBlocks()
|
||||||
|
{
|
||||||
|
using (var pool = new MemoryPool2())
|
||||||
|
{
|
||||||
|
var block1 = pool.Lease(128);
|
||||||
|
var block2 = block1.Next = pool.Lease(128);
|
||||||
|
var block3 = block2.Next = pool.Lease(128);
|
||||||
|
var block4 = block3.Next = pool.Lease(128);
|
||||||
|
|
||||||
|
// There is no data in block2 or block4, so IsEnd should be true after 256 bytes are read.
|
||||||
|
block1.End += 128;
|
||||||
|
block3.End += 128;
|
||||||
|
|
||||||
|
var iterStart = block1.GetIterator();
|
||||||
|
var iterMid = iterStart.Add(128);
|
||||||
|
var iterEnd = iterMid.Add(128);
|
||||||
|
|
||||||
|
Assert.False(iterStart.IsEnd);
|
||||||
|
Assert.False(iterMid.IsEnd);
|
||||||
|
Assert.True(iterEnd.IsEnd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void AssertIterator(MemoryPoolIterator2 iter, MemoryPoolBlock2 block, int index)
|
private void AssertIterator(MemoryPoolIterator2 iter, MemoryPoolBlock2 block, int index)
|
||||||
{
|
{
|
||||||
Assert.Same(block, iter.Block);
|
Assert.Same(block, iter.Block);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue