From: Christopher Faulet Date: Fri, 24 Apr 2020 14:20:49 +0000 (+0200) Subject: BUG/MEDIUM: checks: Unsubscribe to mux events when a conn-stream is destroyed X-Git-Tag: v2.2-dev7~77 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0b9376ae8d3b8b5f98cb390c24708221ab3c6596;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/checks.c b/src/checks.c index 47468af8fd..15966c8131 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