bneradt opened a new pull request, #13641: URL: https://github.com/apache/trafficserver/pull/13641
When an HTTP/2 client sends DATA on a stream that ATS has already closed, ATS discards the payload and answers with RST_STREAM. The bytes are still charged against the connection receive window, as RFC 9113 section 6.9 requires, but no stream ever consumes them, so nothing triggers a WINDOW_UPDATE for them. A peer that keeps sending DATA to closed streams can therefore run the connection window down and stall its own connection until the next legitimate stream makes progress. This can also happen accidentally when an upload is still in flight while ATS resets the stream. This patch addresses this by crediting the discarded bytes back through the existing restart_receiving() path on each of the closed-stream discard paths in rcv_data_frame(). The connection window is still debited for every flow-controlled frame, keeping both endpoints' view of the window in sync, and is then replenished once it drops below the usual threshold. This is the same accounting model nghttp2 uses for frames that will never be consumed by a stream. This also adds an HTTP/2 client AuTest that floods a closed stream with two windows' worth of DATA while honoring the advertised window, and then verifies the connection still completes a POST. Fixes: #13640 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
