# HG changeset patch # User Roman Arutyunyan # Date 1607549181 0 # Node ID 1823e2152fc45fb716564581c862c4bc2b078949 # Parent b9ac4752d0e68b7ec5e6fa79944483f6232c1eb9 QUIC: always calculate rtt for largest acknowledged packet. Previously, when processing client ACK, rtt could be calculated for a packet different than the largest if it was missing in the sent chain. Even though this is an unlikely situation, rtt based on a different packet could be larger than needed leading to bigger pto timeout and performance degradation. diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c --- a/src/event/ngx_event_quic.c +++ b/src/event/ngx_event_quic.c @@ -3276,7 +3276,6 @@ static ngx_int_t ngx_quic_handle_ack_frame_range(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx, uint64_t min, uint64_t max, ngx_msec_t *send_time) { - uint64_t found_num; ngx_uint_t found; ngx_queue_t *q; ngx_quic_frame_t *f; @@ -3286,7 +3285,6 @@ ngx_quic_handle_ack_frame_range(ngx_conn *send_time = NGX_TIMER_INFINITE; found = 0; - found_num = 0; q = ngx_queue_last(&ctx->sent); @@ -3316,9 +3314,8 @@ ngx_quic_handle_ack_frame_range(ngx_conn break; } - if (f->pnum > found_num || !found) { + if (f->pnum == max) { *send_time = f->last; - found_num = f->pnum; } ngx_queue_remove(&f->queue);