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.

(cherry picked from commit 30aa0da532a9853b3ed5b89152fd57537d07ee88)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit d2d264fe64dfc5d9eaa690371d86c972149023ac)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit 99b4c2e9fca398a555dba3e4eff7f5cd4fc0d6ff)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/src/proto_htx.c b/src/proto_htx.c
index c5cc70c..d69a3fb 100644
--- a/src/proto_htx.c
+++ b/src/proto_htx.c
@@ -1420,14 +1420,14 @@
 	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_free(&req->buf);
 	/* Swap the L7 buffer with the channel buffer */