Repository navigation
fix(quic): recover lost streams with exhausted connection credit - #5
Merged
Merged
Conversation
hatoo
enabled auto-merge (squash)
October 9, 2026 09:02
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When a peer's MAX_DATA credit is exhausted, lost request and control-stream bytes currently retry as empty STREAM frames. The peer cannot fill the missing prefix or release more credit, so a request can time out. Pass packet room and fresh-byte credit separately to
SendStream::next_send: retransmissions use packet room, fresh bytes remain credit-limited, anddata_sentstill counts each offset once. This follows RFC 9000 §4.1.Also clip a late loss notification using its original absolute end after an acknowledged prefix is released. Otherwise, unsent bytes can be misclassified as retransmissions and evade the credit limit. The baseline regression exposes three such bytes.
Validation:
cargo fmt --check, strict Clippy, release build, and full debug/release suites pass: 311 unit tests and 51 end-to-end tests per profile; two pre-existing external-server tests remain ignored.86e0502: 102,000 H1/H2/H3 successes, exact status counts, zero request/connection errors.This is a correctness fix. No throughput gain is claimed; existing WSL measurement limitations remain. The separate experimental sparse-storage and GRO changes are not included.