]> git.kaiwu.me - nginx.git/commit
QUIC: fixed probe-congestion deadlock.
authorRoman Arutyunyan <arut@nginx.com>
Mon, 14 Aug 2023 04:28:30 +0000 (08:28 +0400)
committerRoman Arutyunyan <arut@nginx.com>
Mon, 14 Aug 2023 04:28:30 +0000 (08:28 +0400)
commit4f3707c5c775ac83a0cf005617e1fdffd027b8a4
treeca168dd874f0985746fc18fb90b6a03a3e0ad26d
parent842a930b88c6103a793d210826813f09d7fa84a7
QUIC: fixed probe-congestion deadlock.

When probe timeout expired while congestion window was exhausted, probe PINGs
could not be sent.  As a result, lost packets could not be declared lost and
congestion window could not be freed for new packets.  This deadlock
continued until connection idle timeout expiration.

Now PINGs are sent separately from the frame queue without congestion control,
as specified by RFC 9002, Section 7:

  An endpoint MUST NOT send a packet if it would cause bytes_in_flight
  (see Appendix B.2) to be larger than the congestion window, unless the
  packet is sent on a PTO timer expiration (see Section 6.2) or when entering
  recovery (see Section 7.3.2).
src/event/quic/ngx_event_quic_ack.c
src/event/quic/ngx_event_quic_output.c
src/event/quic/ngx_event_quic_transport.h