MINOR: stream-int: Be sure to have a mux to do sends and receives
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 30 Jul 2020 07:26:46 +0000 (09:26 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Thu, 30 Jul 2020 08:06:35 +0000 (10:06 +0200)
In si_cs_send() and si_cs_recv(), we explicitly test the connection's mux is
defined to proceed. For si_cs_recv(), it is probably a bit overkill. But
opportunistic sends are possible from the moment the server connection is
created. So it is safer to do this test.

This patch may be backported as far as 1.9 if necessary.

(cherry picked from commit e96993b1f203a14d2ef1eaa70be595c7d5b98643)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit 17c13f0fdc42e53e1034a7e4ef0147184afd4221)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>

src/stream_interface.c

index a2ea7d7..5052547 100644 (file)
@@ -676,6 +676,10 @@ int si_cs_send(struct conn_stream *cs)
        if (conn->flags & CO_FL_SOCK_WR_SH || oc->flags & CF_SHUTW)
                return 1;
 
+       /* we must wait because the mux is not installed yet */
+       if (!conn->mux)
+               return 0;
+
        if (oc->pipe && conn->xprt->snd_pipe && conn->mux->snd_pipe) {
                ret = conn->mux->snd_pipe(cs, oc->pipe);
                if (ret > 0)
@@ -1233,6 +1237,10 @@ int si_cs_recv(struct conn_stream *cs)
        if (ic->flags & CF_SHUTR)
                return 1;
 
+       /* we must wait because the mux is not installed yet */
+       if (!conn->mux)
+               return 0;
+
        /* stop here if we reached the end of data */
        if (cs->flags & CS_FL_EOS)
                goto end_recv;