diff 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
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) {