]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: servers: Only set SF_SRV_REUSED if the connection if fully ready.
authorOlivier Houchard <ohouchard@haproxy.com>
Fri, 25 Oct 2019 15:00:54 +0000 (17:00 +0200)
committerOlivier Houchard <cognet@ci0.org>
Tue, 29 Oct 2019 13:15:20 +0000 (14:15 +0100)
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.

src/backend.c

index e7e0e77232c607e60b65971f6d7da5110e0d2d5a..a7bcfc4a4323cd949e96c823bd46706389a43b03 100644 (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)