Skip to content

Commit 4a156ba

Browse files
Fallback to ArrayPool in Kestrel (#52106)
1 parent d24f2d7 commit 4a156ba

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

src/Servers/Kestrel/Core/src/Internal/Http/Http1OutputProducer.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,14 @@ private void AddSegment(int sizeHint = 0)
740740
_currentSegment = owner.Memory;
741741
_currentSegmentOwner = owner;
742742
}
743+
else if (sizeHint <= MemoryPool<byte>.Shared.MaxBufferSize)
744+
{
745+
// fallback to ArrayPool instead of the passed in memory pool (default is PinnedBlockMemoryPool)
746+
// PinnedBlockMemoryPool currently defaults to a low (4k) max buffer size while ArrayPool is 2G
747+
var owner = MemoryPool<byte>.Shared.Rent(sizeHint);
748+
_currentSegment = owner.Memory;
749+
_currentSegmentOwner = owner;
750+
}
743751
else
744752
{
745753
_currentSegment = new byte[sizeHint];

src/Servers/Kestrel/test/InMemory.FunctionalTests/ChunkedResponseTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,7 @@ public async Task GetMemoryWithSizeHintWithoutStartAsync()
10421042
Assert.Equal(4096, memory.Length);
10431043

10441044
memory = response.BodyWriter.GetMemory(1000000);
1045-
Assert.Equal(1000000, memory.Length);
1045+
Assert.True(memory.Length >= 1000000);
10461046
await Task.CompletedTask;
10471047
}, testContext))
10481048
{

0 commit comments

Comments
 (0)