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.
diff --git a/src/backend.c b/src/backend.c
index e7e0e77..a7bcfc4 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -1482,8 +1482,13 @@
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)