]> git.kaiwu.me - nginx.git/commitdiff
Fixed frame retransmissions.
authorVladimir Homutov <vl@nginx.com>
Mon, 18 May 2020 10:54:35 +0000 (13:54 +0300)
committerVladimir Homutov <vl@nginx.com>
Mon, 18 May 2020 10:54:35 +0000 (13:54 +0300)
It was possible that retransmit timer was not set after the first
retransmission attempt, due to ngx_quic_retransmit() did not set
wait time properly, and the condition in retransmit handler was incorrect.

src/event/ngx_event_quic.c

index 156dfa51f42be91638ccbc0c457958723bd76deb..31a10f98fc8699754e1b3970e35f72075be7608b 100644 (file)
@@ -3196,7 +3196,7 @@ ngx_quic_retransmit_handler(ngx_event_t *ev)
         if (i == 0) {
             wait = nswait;
 
-        } else if (nswait > 0 && nswait < wait) {
+        } else if (nswait > 0 && (wait == 0 || wait > nswait)) {
             wait = nswait;
         }
     }
@@ -3289,6 +3289,8 @@ ngx_quic_retransmit(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx,
         /* move frames group to the end of queue */
         ngx_queue_add(&ctx->sent, &range);
 
+        wait = qc->tp.max_ack_delay;
+
     } while (q != ngx_queue_sentinel(&ctx->sent));
 
     *waitp = wait;