MINOR: cfgparse: always alloc idle conns task

The idle conn task is is a global task used to cleanup backend
connections marked for deletion. Previously, it was only only allocated
if at least one server in the configuration has idle connections.

This assumption won't be valid anymore when new servers can be created
at runtime with idle connections. Always allocate the global idle conn
task.
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 1ec327b..f6ff361 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -1938,6 +1938,7 @@
 	char *err;
 	struct cfg_postparser *postparser;
 	struct resolvers *curr_resolvers = NULL;
+	int i;
 
 	bind_conf = NULL;
 	/*
@@ -2617,7 +2618,8 @@
 		     LIST_ISEMPTY(&curproxy->uri_auth->http_req_rules))) {
 			const char *uri_auth_compat_req[10];
 			struct act_rule *rule;
-			int i = 0;
+			i = 0;
+
 			/* build the ACL condition from scratch. We're relying on anonymous ACLs for that */
 			uri_auth_compat_req[i++] = "auth";
 
@@ -3288,8 +3290,6 @@
 
 	list_for_each_entry(newsrv, &servers_list, global_list) {
 		/* initialize idle conns lists */
-		int i;
-
 		newsrv->per_thr = calloc(global.nbthread, sizeof(*newsrv->per_thr));
 		if (!newsrv->per_thr) {
 			ha_alert("parsing [%s:%d] : failed to allocate per-thread lists for server '%s'.\n",
@@ -3306,38 +3306,40 @@
 		}
 
 		if (newsrv->max_idle_conns != 0) {
-			if (idle_conn_task == NULL) {
-				idle_conn_task = task_new(MAX_THREADS_MASK);
-				if (!idle_conn_task)
-					goto err;
+			newsrv->curr_idle_thr = calloc(global.nbthread, sizeof(*newsrv->curr_idle_thr));
+			if (!newsrv->curr_idle_thr) {
+				ha_alert("parsing [%s:%d] : failed to allocate idle connection tasks for server '%s'.\n",
+				         newsrv->conf.file, newsrv->conf.line, newsrv->id);
+				cfgerr++;
+				continue;
+			}
+		}
+	}
 
-				idle_conn_task->process = srv_cleanup_idle_conns;
-				idle_conn_task->context = NULL;
+	idle_conn_task = task_new(MAX_THREADS_MASK);
+	if (!idle_conn_task) {
+		ha_alert("parsing : failed to allocate global idle connection task.\n");
+		cfgerr++;
+	}
+	else {
+		idle_conn_task->process = srv_cleanup_idle_conns;
+		idle_conn_task->context = NULL;
 
-				for (i = 0; i < global.nbthread; i++) {
-					idle_conns[i].cleanup_task = task_new(1UL << i);
-					if (!idle_conns[i].cleanup_task)
-						goto err;
-					idle_conns[i].cleanup_task->process = srv_cleanup_toremove_conns;
-					idle_conns[i].cleanup_task->context = NULL;
-					HA_SPIN_INIT(&idle_conns[i].idle_conns_lock);
-					MT_LIST_INIT(&idle_conns[i].toremove_conns);
-				}
+		for (i = 0; i < global.nbthread; i++) {
+			idle_conns[i].cleanup_task = task_new(1UL << i);
+			if (!idle_conns[i].cleanup_task) {
+				ha_alert("parsing : failed to allocate idle connection tasks for thread '%d'.\n", i);
+				cfgerr++;
+				break;
 			}
 
-			newsrv->curr_idle_thr = calloc(global.nbthread, sizeof(*newsrv->curr_idle_thr));
-			if (!newsrv->curr_idle_thr)
-				goto err;
-			continue;
-		err:
-			ha_alert("parsing [%s:%d] : failed to allocate idle connection tasks for server '%s'.\n",
-				 newsrv->conf.file, newsrv->conf.line, newsrv->id);
-			cfgerr++;
-			continue;
+			idle_conns[i].cleanup_task->process = srv_cleanup_toremove_conns;
+			idle_conns[i].cleanup_task->context = NULL;
+			HA_SPIN_INIT(&idle_conns[i].idle_conns_lock);
+			MT_LIST_INIT(&idle_conns[i].toremove_conns);
 		}
 	}
 
-
 	/* Check multi-process mode compatibility */
 
 	if (global.nbproc > 1 && global.cli_fe) {