From fd7ebf117bdefdcfbd1c30a079585867eb22a57d Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Mon, 28 Apr 2025 08:01:40 +0200 Subject: [PATCH] BUG/MEDIUM: mux-spop: Wait end of handshake to declare a spop connection ready A SPOP connection must not be considered as ready while the hello handshake is not finished with success. In addition, no error or shutdown must have been reported for the underlying connection. Otherwise a freshly openned spop connexion may be reused while it is in fact dead, leading to a connection retry. This patch must be backported to 3.1. --- src/mux_spop.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mux_spop.c b/src/mux_spop.c index 6bd520362..1dc4b3588 100644 --- a/src/mux_spop.c +++ b/src/mux_spop.c @@ -2666,7 +2666,8 @@ static int spop_ctl(struct connection *conn, enum mux_ctl_type mux_ctl, void *ou switch (mux_ctl) { case MUX_CTL_STATUS: - if (!(conn->flags & CO_FL_WAIT_XPRT)) + if ((spop_conn->state >= SPOP_CS_FRAME_H && spop_conn->state < SPOP_CS_ERROR) && + !(spop_conn->flags & (SPOP_CF_ERROR|SPOP_CF_ERR_PENDING|SPOP_CF_END_REACHED||SPOP_CF_RCVD_SHUT|SPOP_CF_DISCO_SENT|SPOP_CF_DISCO_FAILED))) ret |= MUX_STATUS_READY; return ret; case MUX_CTL_EXIT_STATUS: -- 2.39.5