Mercurial > hg > nginx
changeset 8322:d9bc33166361 quic
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.
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Sat, 04 Apr 2020 22:27:29 +0300 |
parents | e45719a9b148 |
children | 853908b5a216 |
files | src/event/ngx_event_quic.c |
diffstat | 1 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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); }