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.
This commit is contained in:
Christopher Faulet 2021-05-05 21:05:09 +02:00
parent b205bfdab7
commit 30aa0da532

View File

@ -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);