BUG/MEDIUM: servers: Only set SF_SRV_REUSED if the connection if fully ready.

In connect_server(), if we're reusing a connection, only use SF_SRV_REUSED
if the connection is fully ready. We may be using a multiplexed connection
created by another stream that is not yet ready, and may fail.
If we set SF_SRV_REUSED, process_stream() will then not wait for the timeout
to expire, and retry to connect immediately.

This should be backported to 1.9 and 2.0.
This commit depends on 55234e33708c5a584fb9efea81d71ac47235d518.
This commit is contained in:
Olivier Houchard 2019-10-25 17:00:54 +02:00 committed by Olivier Houchard
parent 6e8e2ec849
commit e8f5f5d8b2

View File

@ -1482,8 +1482,13 @@ int connect_server(struct stream *s)
if (srv_conn->mux->reset)
srv_conn->mux->reset(srv_conn);
}
else
s->flags |= SF_SRV_REUSED;
else {
/* Only consider we're doing reuse if the connection was
* ready.
*/
if (srv_conn->mux->ctl(srv_conn, MUX_STATUS, NULL) & MUX_STATUS_READY)
s->flags |= SF_SRV_REUSED;
}
/* flag for logging source ip/port */
if (strm_fe(s)->options2 & PR_O2_SRC_ADDR)