From 5b904ab35b2a3d87e54990c05765e1a0b0938b03 Mon Sep 17 00:00:00 2001 From: Vladimir Homutov Date: Mon, 21 Sep 2020 13:58:17 +0300 Subject: [PATCH] QUIC: prevented posted push event while in the draining state. If the push event was posted before ngx_quic_close_connection(), it could send data in the draining state. --- src/event/ngx_event_quic.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c index 9301aa9a6..a5f85ee08 100644 --- a/src/event/ngx_event_quic.c +++ b/src/event/ngx_event_quic.c @@ -1492,8 +1492,16 @@ ngx_quic_close_quic(ngx_connection_t *c, ngx_int_t rc) return NGX_AGAIN; } - if (qc->close.timer_set) { - return NGX_AGAIN; + if (qc->push.timer_set) { + ngx_del_timer(&qc->push); + } + + if (qc->pto.timer_set) { + ngx_del_timer(&qc->pto); + } + + if (qc->push.posted) { + ngx_delete_posted_event(&qc->push); } for (i = 0; i < NGX_QUIC_ENCRYPTION_LAST; i++) { @@ -1505,16 +1513,8 @@ ngx_quic_close_quic(ngx_connection_t *c, ngx_int_t rc) ngx_quic_free_frames(c, &qc->send_ctx[i].sent); } - if (qc->push.timer_set) { - ngx_del_timer(&qc->push); - } - - if (qc->pto.timer_set) { - ngx_del_timer(&qc->pto); - } - - if (qc->push.posted) { - ngx_delete_posted_event(&qc->push); + if (qc->close.timer_set) { + return NGX_AGAIN; } ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0,