# HG changeset patch # User Vladimir Homutov # Date 1586028449 -10800 # Node ID d9bc331663614b63a99b2a4fcb7bea4f15104ba0 # Parent e45719a9b148e738b7e61131fcfed59c2e660074 Do not set timers after the connection is closed. 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. diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c --- a/src/event/ngx_event_quic.c +++ b/src/event/ngx_event_quic.c @@ -704,6 +704,7 @@ ngx_quic_close_connection(ngx_connection qc = c->quic; if (qc) { + qc->closing = 1; tree = &qc->streams.tree; if (tree->root != tree->sentinel) { @@ -727,6 +728,10 @@ ngx_quic_close_connection(ngx_connection ngx_post_event(rev, &ngx_posted_events); + if (rev->timer_set) { + ngx_del_timer(rev); + } + #if (NGX_DEBUG) ns++; #endif @@ -735,7 +740,6 @@ ngx_quic_close_connection(ngx_connection ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "quic connection has %ui active streams", ns); - qc->closing = 1; return; } @@ -1622,7 +1626,7 @@ ngx_quic_output(ngx_connection_t *c) } } - 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); }