From: Christopher Faulet Date: Sat, 9 May 2020 15:27:43 +0000 (+0200) Subject: BUG/MINOR: checks: Don't subscribe to I/O events if it is already done X-Git-Tag: v2.2-dev8~89 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a2fb0c3b6f478bcc22c428c4ed90453da3a3d53d;p=thirdparty%2Fhaproxy.git BUG/MINOR: checks: Don't subscribe to I/O events if it is already done Subscription to I/O events should not be performed if the check is already subscribed. No backport needed. (cherry picked from commit 9e0b3e92f73b6715fb2814e3d09b8ba62270b417) Signed-off-by: Christopher Faulet --- diff --git a/src/checks.c b/src/checks.c index 2e6ffc0b7e..3fc5555cac 100644 --- a/src/checks.c +++ b/src/checks.c @@ -2635,10 +2635,14 @@ static int tcpcheck_main(struct check *check) if (check->current_step && check->current_step->action == TCPCHK_ACT_CONNECT) { rule = LIST_NEXT(&check->current_step->list, typeof(rule), list); if (conn && (conn->flags & CO_FL_WAIT_XPRT)) { - if (rule->action == TCPCHK_ACT_SEND) - conn->mux->subscribe(cs, SUB_RETRY_SEND, &check->wait_list); - else if (rule->action == TCPCHK_ACT_EXPECT) - conn->mux->subscribe(cs, SUB_RETRY_RECV, &check->wait_list); + if (rule->action == TCPCHK_ACT_SEND) { + if (!(check->wait_list.events & SUB_RETRY_SEND)) + conn->mux->subscribe(cs, SUB_RETRY_SEND, &check->wait_list); + } + else if (rule->action == TCPCHK_ACT_EXPECT) { + if (!(check->wait_list.events & SUB_RETRY_RECV)) + conn->mux->subscribe(cs, SUB_RETRY_RECV, &check->wait_list); + } goto out; } } @@ -2736,7 +2740,8 @@ static int tcpcheck_main(struct check *check) if (eval_ret == TCPCHK_EVAL_WAIT) { check->current_step = rule->expect.head; - conn->mux->subscribe(cs, SUB_RETRY_RECV, &check->wait_list); + if (!(check->wait_list.events & SUB_RETRY_RECV)) + conn->mux->subscribe(cs, SUB_RETRY_RECV, &check->wait_list); } break; case TCPCHK_ACT_ACTION_KW: