Skip to content

Fix PooledBufferStream.Reset() to reset Position property#9744

Merged
ReubenBond merged 2 commits intomainfrom
copilot/fix-pooledbufferstream-reset
Nov 5, 2025
Merged

Fix PooledBufferStream.Reset() to reset Position property#9744
ReubenBond merged 2 commits intomainfrom
copilot/fix-pooledbufferstream-reset

Conversation

Copy link
Contributor

Copilot AI commented Nov 4, 2025

PooledBufferStream.Reset() was not resetting the Position property to 0, causing position state to leak across pooled stream reuses.

Changes

  • PooledBufferStream.cs: Added Position = 0; to Reset() method
  • PooledBufferStreamTests.cs: Added test Reset_WithPosition_ResetsPositionToZero validating position resets for various initial values

Example

var stream = PooledBufferStream.Rent();
stream.SetLength(100);
stream.Position = 50;

PooledBufferStream.Return(stream);  // Calls Reset() internally

var recycled = PooledBufferStream.Rent();  // Gets same instance
// recycled.Position is now 0 (was 50 before fix)

Fixes #9274

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 0t3vsblobprodcus362.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • 1k9vsblobprodcus379.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
  • 37bvsblobprodcus311.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
  • 37cvsblobprodcus359.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
  • 4zjvsblobprodcus390.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
  • 96bvsblobprodcus338.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • c50vsblobprodcus330.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
  • cflvsblobprodcus383.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • ckzvsblobprodcus347.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • dnceng.pkgs.visualstudio.com
    • Triggering command: dotnet test test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj --filter FullyQualifiedName~PooledBufferStreamTests --no-build (dns block)
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • frdvsblobprodcus327.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • i1qvsblobprodcus353.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
  • imzvsblobprodcus368.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • jd4vsblobprodcus366.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
  • josvsblobprodcus372.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
  • jrqvsblobprodcus343.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • kh4vsblobprodcus325.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • lylvsblobprodcus31.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • m6xvsblobprodcus342.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • mfjvsblobprodcus373.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
  • pdfvsblobprodcus380.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • rcxvsblobprodcus328.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)
  • st8vsblobprodcus339.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
  • x3yvsblobprodcus370.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
  • xupvsblobprodcus332.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
  • yluvsblobprodcus367.vsblob.vsassets.io
    • Triggering command: dotnet build test/Orleans.Serialization.UnitTests/Orleans.Serialization.UnitTests.csproj (dns block)
    • Triggering command: dotnet build src/Orleans.Serialization/Orleans.Serialization.csproj (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>PooledBufferStream doesn't reset the position when reset</issue_title>
<issue_description>In PooledBufferStream, the position is not set to 0 when calling Reset():

public void Reset()
{
foreach (var buffer in _segments)
{
Pool.Return(buffer);
}
_segments.Clear();
_length = 0;
_capacity = 0;
}

It can cause issues when recycling a stream where the stream position is used. The position should be set to 0, and we should add a test to validate this behavior.
</issue_description>

<agent_instructions>Assign the PR to benjaminpetit</agent_instructions>

Comments on the Issue (you are @copilot in this section)


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Microsoft Reviewers: Open in CodeFlow

Co-authored-by: benjaminpetit <20427417+benjaminpetit@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix PooledBufferStream position reset issue Fix PooledBufferStream.Reset() to reset Position property Nov 4, 2025
Copilot AI requested a review from benjaminpetit November 4, 2025 09:18
@ReubenBond ReubenBond marked this pull request as ready for review November 5, 2025 00:50
@ReubenBond ReubenBond added this pull request to the merge queue Nov 5, 2025
Merged via the queue into main with commit 9aefcb9 Nov 5, 2025
61 of 64 checks passed
@ReubenBond ReubenBond deleted the copilot/fix-pooledbufferstream-reset branch November 5, 2025 01:16
@github-actions github-actions bot locked and limited conversation to collaborators Dec 6, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PooledBufferStream doesn't reset the position when reset

3 participants