]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUG/MEDIUM: quic: properly decount out-of-order ACK on stream release
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 9 Oct 2024 09:59:32 +0000 (11:59 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 9 Oct 2024 15:47:16 +0000 (17:47 +0200)
commit456c3997b203ab12306e9010ffb5507c905970e0
tree10265be0244316300e06423edb356a6e6dbc9cd3
parentf0049d0748542153266ff9eb5620d2a7929eb103
BUG/MEDIUM: quic: properly decount out-of-order ACK on stream release

Out-of-order STREAM ACK are buffered in its related streambuf tree. On
insertion, overlapping or contiguous ranges are merged together. The
total size of buffered ack range is stored in <room> streambuf member
and reported to QUIC MUX layer on streambuf release. The objective is to
ensure QUIC MUX layer can allocate Tx buffers conveniently to preserve a
good transfer throughput.

Streamdesc is the overall container of many streambufs. It may also been
released when its upper QCS instance is freed, after all stream data
have been emitted. In this case, the active streambuf is also released
via custom code. However, in this code path, <room> was not reported to
the QUIC MUX layer.

This bug caused wrong estimation for the QUIC MUX txbuf window, with
bytes reamining even after all ACK reception. This may cause transfer
freeze on other connection streams, with RESET_STREAM emission on
timeout client.

To fix this, reuse the existing qc_stream_buf_release() function on
streamdesc release. This ensures that notify_room is correctly used.

No need to backport.
src/quic_stream.c