summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorVladimir Homutov <vl@nginx.com>2020-04-15 13:09:39 +0300
committerVladimir Homutov <vl@nginx.com>2020-04-15 13:09:39 +0300
commit001b81af88c5f67b789142cd07ba3f08e9f91102 (patch)
treeb7e67d9d3c727f41ba85c979915e50f3fc31d18b /src
parent53d47318c5fc181a8fa05f2ecc785fd14a4e5a8d (diff)
downloadnginx-001b81af88c5f67b789142cd07ba3f08e9f91102.tar.gz
nginx-001b81af88c5f67b789142cd07ba3f08e9f91102.tar.bz2
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)
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_quic.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c
index 42a29e342..a85c14934 100644
--- a/src/event/ngx_event_quic.c
+++ b/src/event/ngx_event_quic.c
@@ -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);
}