]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: checks: Unsubscribe to mux events when a conn-stream is destroyed
authorChristopher Faulet <cfaulet@haproxy.com>
Fri, 24 Apr 2020 14:20:49 +0000 (16:20 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 27 Apr 2020 08:46:28 +0000 (10:46 +0200)
Since the tcp-check based heath checks uses the best multuplexer for a
connection, the mux-pt is no longer the only possible choice. So events
subscriptions and unsubscriptions must be done with the mux.

No backport needed.

src/checks.c

index 47468af8fd961e941b9b7f5a21ea429c8b27c5e0..15966c8131cca01477605eb6cd17d5e5e44ea289 100644 (file)
@@ -1660,8 +1660,7 @@ static enum tcpcheck_eval_ret tcpcheck_eval_connect(struct check *check, struct
        /* 3- release and replace the old one on success */
        if (check->cs) {
                if (check->wait_list.events)
-                       cs->conn->xprt->unsubscribe(cs->conn, cs->conn->xprt_ctx,
-                                                   check->wait_list.events, &check->wait_list);
+                       cs->conn->mux->unsubscribe(cs, check->wait_list.events, &check->wait_list);
 
                /* We may have been scheduled to run, and the I/O handler
                 * expects to have a cs, so remove the tasklet
@@ -3270,10 +3269,7 @@ static struct task *process_chk_conn(struct task *t, void *context, unsigned sho
                task_set_affinity(t, MAX_THREADS_MASK);
                if (cs) {
                        if (check->wait_list.events)
-                               cs->conn->xprt->unsubscribe(cs->conn,
-                                                           cs->conn->xprt_ctx,
-                                                           check->wait_list.events,
-                                                           &check->wait_list);
+                               cs->conn->mux->unsubscribe(cs, check->wait_list.events, &check->wait_list);
                        /* We may have been scheduled to run, and the
                         * I/O handler expects to have a cs, so remove
                         * the tasklet
@@ -3333,10 +3329,7 @@ static struct task *process_chk_conn(struct task *t, void *context, unsigned sho
 
                if (cs) {
                        if (check->wait_list.events)
-                               cs->conn->xprt->unsubscribe(cs->conn,
-                                                           cs->conn->xprt_ctx,
-                                                           check->wait_list.events,
-                                                           &check->wait_list);
+                               cs->conn->mux->unsubscribe(cs, check->wait_list.events, &check->wait_list);
                        /* We may have been scheduled to run, and the
                         * I/O handler expects to have a cs, so remove
                         * the tasklet