BUG/MEDIUM: stream: Don't clear the stream_interface flags in si_update_both.

In commit d7704b534, we introduced and expiration flag on the stream interface,
which is used for the connect, the queue and the turn around. Because the
turn around state isn't an error, the flag was reset in process_stream(), and
later in commit cff6411f9 when introducing the SI_FL_ERR flag, the cleanup
of the flag at this place was erroneously generalized.
To fix this, the SI_FL_EXP flag is only cleared at the end of the turn around
state, and nobody should clear the stream interface flags anymore.

This should be backported to 1.9, it has no known impact on older versions.
This commit is contained in:
Olivier Houchard 2019-04-09 19:17:41 +02:00 committed by Olivier Houchard
parent 120f64a8c4
commit 86dcad6c62
2 changed files with 2 additions and 3 deletions

View File

@ -1051,6 +1051,8 @@ static void sess_update_stream_int(struct stream *s)
if (!(si->flags & SI_FL_EXP))
return; /* still in turn-around */
si->flags &= ~SI_FL_EXP;
si->exp = TICK_ETERNITY;
/* we keep trying on the same server as long as the stream is

View File

@ -830,9 +830,6 @@ void si_update_both(struct stream_interface *si_f, struct stream_interface *si_b
req->flags &= ~(CF_READ_NULL|CF_READ_PARTIAL|CF_READ_ATTACHED|CF_WRITE_NULL|CF_WRITE_PARTIAL);
res->flags &= ~(CF_READ_NULL|CF_READ_PARTIAL|CF_READ_ATTACHED|CF_WRITE_NULL|CF_WRITE_PARTIAL);
si_f->flags &= ~SI_FL_EXP;
si_b->flags &= ~SI_FL_EXP;
si_f->prev_state = si_f->state;
si_b->prev_state = si_b->state;