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 <cfaulet@haproxy.com>
diff --git a/src/checks.c b/src/checks.c
index 2e6ffc0..3fc5555 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -2635,10 +2635,14 @@
 	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 @@
 
 			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: