Skip to content

GatedStream.Dispose does not end pending reads, so net472 readiness rows wait out the 5 s release bound #441

Open

Description

@Blind-Striker

tests/OpenCode.Sdk.Tests/Support/GatedStream does not override Dispose, so closing it does not end a pending ReadChunkAsync. A real pipe's reader ends when the pipe closes.

On net472, StreamReader.ReadLineAsync() takes no cancellation token. A gated stdout therefore waits out PipeOutputPump's 5-second release bound instead of ending at the close. sdk-runtime measured the two recorded-exit rows in OpenCodeServerReadinessTests at master: 5.07 s and 5.05 s on net472, against about 1 s for the rows that use real pipes.

The rows pass, so this is a realism and wall-time gap in the fixture, not a red test. The cost is a fixture that differs from production in exactly the path those rows test (stream end at close), plus about 4 s per row on net472.

Suggested fix: GatedStream.Dispose faults or ends the pending reads, the way a closed pipe does. The two rows would then finish at the close, near the real-pipe timing.

Out of TST-E4's scope (its roadmap steps don't name it). The readiness rows are in RT-E2 C's in-flight files, so the fix goes after RT-E2 C merges. Reported by sdk-runtime during TST-E4 planning, 2026-10-17.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions