From: Vladimir Homutov Date: Fri, 15 Oct 2021 09:26:42 +0000 (+0300) Subject: QUIC: optimized ack range processing. X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/postgres_fdw.c?a=commitdiff_plain;h=0cd45dea762d3fff535dededf1a4490730f6e7f8;p=nginx.git QUIC: optimized ack range processing. The sent queue is sorted by packet number. It is possible to avoid traversing full queue while handling ack ranges. It makes sense to start traversing from the queue head (i.e. check oldest packets first). --- diff --git a/src/event/quic/ngx_event_quic_ack.c b/src/event/quic/ngx_event_quic_ack.c index 3e4bb6d4f..22697ccb6 100644 --- a/src/event/quic/ngx_event_quic_ack.c +++ b/src/event/quic/ngx_event_quic_ack.c @@ -223,14 +223,18 @@ ngx_quic_handle_ack_frame_range(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx, st->max_pn = NGX_TIMER_INFINITE; found = 0; - q = ngx_queue_last(&ctx->sent); + q = ngx_queue_head(&ctx->sent); while (q != ngx_queue_sentinel(&ctx->sent)) { f = ngx_queue_data(q, ngx_quic_frame_t, queue); - q = ngx_queue_prev(q); + q = ngx_queue_next(q); + + if (f->pnum > max) { + break; + } - if (f->pnum >= min && f->pnum <= max) { + if (f->pnum >= min) { ngx_quic_congestion_ack(c, f); switch (f->type) {