From 6e8e2ec8494f3ed92f0c80c8382f80072384a4f3 Mon Sep 17 00:00:00 2001 From: Olivier Houchard Date: Fri, 25 Oct 2019 16:25:20 +0200 Subject: [PATCH] BUG/MEDIUM: stream_interface: Only use SI_ST_RDY when the mux is ready. In si_connect(), only switch the strema_interface status to SI_ST_RDY if we're reusing a connection and if the connection's mux is ready. Otherwise, maybe we're reusing a connection that is not fully established yet, and may fail, and setting SI_ST_RDY would mean we would not be able to retry to connect. This should be backported to 1.9 and 2.0. This commit depends on 55234e33708c5a584fb9efea81d71ac47235d518. --- include/proto/stream_interface.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h index e0f699184..c0f88b265 100644 --- a/include/proto/stream_interface.h +++ b/include/proto/stream_interface.h @@ -521,7 +521,11 @@ static inline int si_connect(struct stream_interface *si, struct connection *con /* try to reuse the existing connection, it will be * confirmed once we can send on it. */ - si->state = SI_ST_RDY; + /* Is the connection really ready ? */ + if (conn->mux->ctl(conn, MUX_STATUS, NULL) & MUX_STATUS_READY) + si->state = SI_ST_RDY; + else + si->state = SI_ST_CON; } /* needs src ip/port for logging */