From e6ae77f64f6e5fb8fe5f9cc3ccd6f84545432699 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 7 Nov 2017 11:59:51 +0100 Subject: [PATCH] MINOR: h2: don't re-enable the connection's task when we're closing It's pointless to requeue the task when we're closing, so swap the order of the task_queue() and h2_release(). It also matches what was written in the comment regarding re-arming the timer. --- src/mux_h2.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/mux_h2.c b/src/mux_h2.c index b241a5b53..e1c995516 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -2195,20 +2195,10 @@ static void h2_detach(struct conn_stream *cs) /* h2s still attached to the h2c */ eb32_delete(&h2s->by_id); - if (h2c->task) { - if (eb_is_empty(&h2c->streams_by_id)) { - h2c->task->expire = tick_add(now_ms, h2c->timeout); - task_queue(h2c->task); - } - else - h2c->task->expire = TICK_ETERNITY; - } - /* We don't want to close right now unless we're removing the * last stream, and either the connection is in error, or it * reached the ID already specified in a GOAWAY frame received - * or sent (as seen by last_sid >= 0). A timer should be armed - * to kill the connection after some idle time though. + * or sent (as seen by last_sid >= 0). */ if (eb_is_empty(&h2c->streams_by_id) && /* don't close if streams exist */ ((h2c->conn->flags & CO_FL_ERROR) || /* errors close immediately */ @@ -2219,6 +2209,14 @@ static void h2_detach(struct conn_stream *cs) /* no more stream will come, kill it now */ h2_release(h2c->conn); } + else if (h2c->task) { + if (eb_is_empty(&h2c->streams_by_id)) { + h2c->task->expire = tick_add(now_ms, h2c->timeout); + task_queue(h2c->task); + } + else + h2c->task->expire = TICK_ETERNITY; + } } pool_free2(pool2_h2s, h2s); }