From 30aa0da532a9853b3ed5b89152fd57537d07ee88 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Wed, 5 May 2021 21:05:09 +0200 Subject: [PATCH] BUG/MINOR: stream: Reset stream final state and si error type on L7 retry Thanks to a previous fix, the stream error mask is now cleared on L7 retry. But the stream final state (SF_FINST_*) and the stream-interface error type must also be reset to properly restart a new connection and be sure to not inherit errors from the previous connection attempt. In addition, SF_ADDR_SET flag is not systematically removed. stream_choose_redispatch() already takes care to unset it if necessary. When the connection is not redispatch, the server address can be preserved. This patch must be backported as far as 2.0. --- src/http_ana.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/http_ana.c b/src/http_ana.c index bed8d09b4..b35664645 100644 --- a/src/http_ana.c +++ b/src/http_ana.c @@ -1309,14 +1309,14 @@ static __inline int do_l7_retry(struct stream *s, struct stream_interface *si) res->flags &= ~(CF_READ_ERROR | CF_READ_TIMEOUT | CF_SHUTR | CF_EOI | CF_READ_NULL | CF_SHUTR_NOW); res->analysers = 0; si->flags &= ~(SI_FL_ERR | SI_FL_EXP | SI_FL_RXBLK_SHUT); - s->flags &= ~SF_ADDR_SET; + si->err_type = SI_ET_NONE; + s->flags &= ~(SF_ERR_MASK | SF_FINST_MASK); stream_choose_redispatch(s); si->exp = TICK_ETERNITY; res->rex = TICK_ETERNITY; res->to_forward = 0; res->analyse_exp = TICK_ETERNITY; res->total = 0; - s->flags &= ~SF_ERR_MASK; si_release_endpoint(&s->si[1]); b_reset(&req->buf);