Mercurial > hg > nginx-quic
changeset 8646:1798acc01970 quic
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).
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Fri, 15 Oct 2021 12:26:42 +0300 |
parents | 404de224517e |
children | da112e7f8de6 |
files | src/event/quic/ngx_event_quic_ack.c |
diffstat | 1 files changed, 7 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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) {