You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
net.quic: prune dead_request_streams once the peer's stream is drained
fail_request_stream() marked a failed stream dead forever with no pruning,
unlike the two sibling maps (request_streams/request_decoders) it already
prunes in the same function -- unbounded on a long-lived pooled HTTP/3
connection. Flagged by JalonSolov's review on PR #28129.
Adds prune_terminal_dead_streams(), called once per drive() cycle, which
drops an entry once QuicConn.stream_recv_status confirms the underlying
stream's receive side has itself reached a terminal state (reset or fin
received) -- at that point RFC 9000 guarantees no further frames for that
ID can ever arrive, so the bookkeeping is no longer needed. Entries for
streams the peer hasn't finished draining yet are left in place, since it
may still legally keep sending (this module has no STOP_SENDING API yet).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
assert stream_id !in h.dead_request_streams, 'dead_request_streams must not grow unboundedly for the lifetime of a long-lived pooled connection -- once the QUIC layer confirms the peer can never send more on this stream ID, this bookkeeping entry must be pruned too'
655
+
}
656
+
616
657
// test_h3_conn_blocked_headers_retry_after_delayed_encoder_instruction is
617
658
// the standout new-integration-behavior case (no direct Phase 10/11 test
618
659
// precedent): a HEADERS frame referencing a dynamic-table entry arrives
0 commit comments