# HG changeset patch # User Vladimir Homutov # Date 1634290002 -10800 # Node ID 1798acc01970ae5a03f785b7679fe34c32adcfea # Parent 404de224517e33f685613d6425dcdb3c8ef5b97e 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 --- 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_conn 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 >= min && f->pnum <= max) { + if (f->pnum > max) { + break; + } + + if (f->pnum >= min) { ngx_quic_congestion_ack(c, f); switch (f->type) {