]> git.kaiwu.me - nginx.git/commitdiff
Free remaining frames on connection close.
authorVladimir Homutov <vl@nginx.com>
Wed, 15 Apr 2020 10:09:39 +0000 (13:09 +0300)
committerVladimir Homutov <vl@nginx.com>
Wed, 15 Apr 2020 10:09:39 +0000 (13:09 +0300)
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)

src/event/ngx_event_quic.c

index 42a29e342006a361bf9d216c4c98aa0bd81cf63e..a85c14934f4796307e3b95d098f183149edf0152 100644 (file)
@@ -750,10 +750,6 @@ ngx_quic_close_connection(ngx_connection_t *c)
 
     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_t *c)
             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);
         }