From 234740f65d0a57c75570c68d3bc6a4513d473ff8 Mon Sep 17 00:00:00 2001 From: Dave Pirotte Date: Wed, 10 Jul 2019 13:57:38 +0000 Subject: [PATCH] BUG/MINOR: mux-h1: Correctly report Ti timer when HTX and keepalives are used When HTTP keepalives are used in conjunction with HTX, the Ti timer reports the elapsed time since the beginning of the connection instead of the end of the previous request as stated in the documentation. Th, Tq and Tt also report incorrectly as a result. When creating a new h1s, check if it is the first request on the connection. If not, set the session create times to the current timestamp rather than the initial session accept timestamp. This makes the logged timers behave as stated in the documentation. This fix should be backported to 1.9 and 2.0. --- src/mux_h1.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/mux_h1.c b/src/mux_h1.c index c8db2637b..365c5ea02 100644 --- a/src/mux_h1.c +++ b/src/mux_h1.c @@ -306,10 +306,20 @@ static struct h1s *h1s_create(struct h1c *h1c, struct conn_stream *cs, struct se if (!sess) sess = h1c->conn->owner; - h1s->csinfo.create_date = sess->accept_date; - h1s->csinfo.tv_create = sess->tv_accept; - h1s->csinfo.t_handshake = sess->t_handshake; - h1s->csinfo.t_idle = -1; + /* Timers for subsequent sessions on the same HTTP 1.x connection + * measure from `now`, not from the connection accept time */ + if (h1s->flags & H1S_F_NOT_FIRST) { + h1s->csinfo.create_date = date; + h1s->csinfo.tv_create = now; + h1s->csinfo.t_handshake = 0; + h1s->csinfo.t_idle = -1; + } + else { + h1s->csinfo.create_date = sess->accept_date; + h1s->csinfo.tv_create = sess->tv_accept; + h1s->csinfo.t_handshake = sess->t_handshake; + h1s->csinfo.t_idle = -1; + } } else { if (h1c->px->options2 & PR_O2_RSPBUG_OK)