Mercurial > hg > nginx
comparison src/event/quic/ngx_event_quic_ack.c @ 8884: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 | f3331deed357 |
children | da112e7f8de6 |
comparison
equal
deleted
inserted
replaced
8883:404de224517e | 8884:1798acc01970 |
---|---|
221 qc = ngx_quic_get_connection(c); | 221 qc = ngx_quic_get_connection(c); |
222 | 222 |
223 st->max_pn = NGX_TIMER_INFINITE; | 223 st->max_pn = NGX_TIMER_INFINITE; |
224 found = 0; | 224 found = 0; |
225 | 225 |
226 q = ngx_queue_last(&ctx->sent); | 226 q = ngx_queue_head(&ctx->sent); |
227 | 227 |
228 while (q != ngx_queue_sentinel(&ctx->sent)) { | 228 while (q != ngx_queue_sentinel(&ctx->sent)) { |
229 | 229 |
230 f = ngx_queue_data(q, ngx_quic_frame_t, queue); | 230 f = ngx_queue_data(q, ngx_quic_frame_t, queue); |
231 q = ngx_queue_prev(q); | 231 q = ngx_queue_next(q); |
232 | 232 |
233 if (f->pnum >= min && f->pnum <= max) { | 233 if (f->pnum > max) { |
234 break; | |
235 } | |
236 | |
237 if (f->pnum >= min) { | |
234 ngx_quic_congestion_ack(c, f); | 238 ngx_quic_congestion_ack(c, f); |
235 | 239 |
236 switch (f->type) { | 240 switch (f->type) { |
237 case NGX_QUIC_FT_ACK: | 241 case NGX_QUIC_FT_ACK: |
238 case NGX_QUIC_FT_ACK_ECN: | 242 case NGX_QUIC_FT_ACK_ECN: |