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)
This commit is contained in:
Vladimir Homutov 2020-04-15 13:09:39 +03:00
parent 53d47318c5
commit 001b81af88

View 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);
}