changeset 8398:8bec0ac23cf9 quic

Fixed retransmission of frames after closing connection. Frames in sent queues are discarded, as no acknowledgment is expected if the connection is closing.
author Vladimir Homutov <vl@nginx.com>
date Thu, 21 May 2020 15:41:01 +0300
parents 1245e274b9ba
children ffd362e87eb2
files src/event/ngx_event_quic.c
diffstat 1 files changed, 7 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/event/ngx_event_quic.c
+++ b/src/event/ngx_event_quic.c
@@ -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,
 
     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;