changeset 8336:739f018225af quic

Free remaining frames on connection close. Frames can still float in the following queues: - crypto frames reordering queues (one per encryption level) - moved crypto frames cleanup to the moment where all streams are closed - stream frames reordering queues (one per packet number namespace) - frames retransmit queues (one per packet number namespace)
author Vladimir Homutov <vl@nginx.com>
date Wed, 15 Apr 2020 13:09:39 +0300
parents 76839f55bc48
children ab443e80d9e4
files src/event/ngx_event_quic.c
diffstat 1 files changed, 9 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/event/ngx_event_quic.c
+++ b/src/event/ngx_event_quic.c
@@ -750,10 +750,6 @@ ngx_quic_close_connection(ngx_connection
 
     if (qc) {
 
-        for (i = 0; i < NGX_QUIC_ENCRYPTION_LAST; i++) {
-            ngx_quic_free_frames(c, &qc->crypto[i].frames);
-        }
-
         qc->closing = 1;
         tree = &qc->streams.tree;
 
@@ -793,6 +789,15 @@ ngx_quic_close_connection(ngx_connection
             return;
         }
 
+        for (i = 0; i < NGX_QUIC_ENCRYPTION_LAST; i++) {
+            ngx_quic_free_frames(c, &qc->crypto[i].frames);
+        }
+
+        for (i = 0; i < NGX_QUIC_SEND_CTX_LAST; i++) {
+            ngx_quic_free_frames(c, &qc->send_ctx[i].frames);
+            ngx_quic_free_frames(c, &qc->send_ctx[i].sent);
+        }
+
         if (qc->push.timer_set) {
             ngx_del_timer(&qc->push);
         }