From 0b9376ae8d3b8b5f98cb390c24708221ab3c6596 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Fri, 24 Apr 2020 16:20:49 +0200 Subject: [PATCH] BUG/MEDIUM: checks: Unsubscribe to mux events when a conn-stream is destroyed 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 | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/checks.c b/src/checks.c index 47468af8f..15966c813 100644 --- a/src/checks.c +++ b/src/checks.c @@ -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