]> git.kaiwu.me - nginx.git/commitdiff
Fixed retransmission of frames after closing connection.
authorVladimir Homutov <vl@nginx.com>
Thu, 21 May 2020 12:41:01 +0000 (15:41 +0300)
committerVladimir Homutov <vl@nginx.com>
Thu, 21 May 2020 12:41:01 +0000 (15:41 +0300)
Frames in sent queues are discarded, as no acknowledgment is expected
if the connection is closing.

src/event/ngx_event_quic.c

index f7191f51d0dab0fd69423a6e3e10da79f1907cda..71e21310ca7f8d4c9d597bc75e91b071539f0f80 100644 (file)
@@ -1165,6 +1165,7 @@ static ngx_int_t
 ngx_quic_close_quic(ngx_connection_t *c, ngx_int_t rc)
 {
     ngx_uint_t                    i, err;
+    ngx_quic_send_ctx_t          *ctx;
     ngx_quic_connection_t        *qc;
     enum ssl_encryption_level_t   level;
 
@@ -1172,6 +1173,12 @@ ngx_quic_close_quic(ngx_connection_t *c, ngx_int_t rc)
 
     if (!qc->closing) {
 
+        /* drop packets from retransmit queues, no ack is expected */
+        for (i = 0; i < NGX_QUIC_SEND_CTX_LAST; i++) {
+            ctx = ngx_quic_get_send_ctx(qc, i);
+            ngx_quic_free_frames(c, &ctx->sent);
+        }
+
         level = (qc->state == ssl_encryption_early_data)
                 ? ssl_encryption_application
                 : qc->state;