]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: mux_pt: Don't call unsubscribe if we did not subscribe.
authorOlivier Houchard <cognet@ci0.org>
Sat, 10 Aug 2019 21:56:16 +0000 (23:56 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 16 Aug 2019 14:11:56 +0000 (16:11 +0200)
In mux_pt_attach(), don't inconditionally call unsubscribe, and only do so
if we were subscribed. The idea was that at this point we would always be
subscribed, as for the mux_pt attach would only be called after at least one
request, after which the mux_pt would have subscribed, but this is wrong.
We can also be called if for some reason the connection failed before the
xprt was created. And with no xprt, attempting to call unsubscribe will
probably lead to a crash.

This should be backported to 2.0.

src/mux_pt.c

index 0119cb9c2592e78bdc0101813a77c35cd62e871a..a86cbefd920c3b0291a6f1a65ca4cc88c675922d 100644 (file)
@@ -146,7 +146,8 @@ static struct conn_stream *mux_pt_attach(struct connection *conn, struct session
        struct conn_stream *cs;
        struct mux_pt_ctx *ctx = conn->ctx;
 
-       conn->xprt->unsubscribe(ctx->conn, conn->xprt_ctx, SUB_RETRY_RECV, &ctx->wait_event);
+       if (ctx->wait_event.events)
+               conn->xprt->unsubscribe(ctx->conn, conn->xprt_ctx, SUB_RETRY_RECV, &ctx->wait_event);
        cs = cs_new(conn);
        if (!cs)
                goto fail;