The qc->closing flag is set when a connection close is initiated for the first
time.
No timers will be set if the flag is active.
TODO: this is a temporary solution to avoid running timer handlers after
connection (and it's pool) was destroyed. It looks like currently we have
no clear policy of connection closing in regard to timers.
qc = c->quic;
if (qc) {
+ qc->closing = 1;
tree = &qc->streams.tree;
if (tree->root != tree->sentinel) {
ngx_post_event(rev, &ngx_posted_events);
+ if (rev->timer_set) {
+ ngx_del_timer(rev);
+ }
+
#if (NGX_DEBUG)
ns++;
#endif
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
"quic connection has %ui active streams", ns);
- qc->closing = 1;
return;
}
}
}
- if (!qc->send_timer_set) {
+ if (!qc->send_timer_set && !qc->closing) {
qc->send_timer_set = 1;
ngx_add_timer(c->read, qc->tp.max_idle_timeout);
}