[BUG] proxy: stats frontend and peers were missing many initializers
This was revealed with one of the very latest patches which caused
the listener_queue not to be initialized on the stats socket frontend.
And in fact a number of other ones were missing too. This is getting so
boring that now we'll always make use of the same function to initialize
any proxy. Doing so has even saved about 500 bytes on the binary due to
the avoided code redundancy.
No backport is needed.
diff --git a/include/proto/proxy.h b/include/proto/proxy.h
index afcfa0a..2b5328c 100644
--- a/include/proto/proxy.h
+++ b/include/proto/proxy.h
@@ -43,6 +43,7 @@
struct proxy *findproxy(const char *name, int cap);
struct server *findserver(const struct proxy *px, const char *name);
int proxy_cfg_ensure_no_http(struct proxy *curproxy);
+void init_new_proxy(struct proxy *p);
int get_backend_server(const char *bk_name, const char *sv_name,
struct proxy **bk, struct server **sv);
diff --git a/src/cfgparse.c b/src/cfgparse.c
index fd81a20..04373ac 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -1020,34 +1020,6 @@
return err_code;
}
-/* Perform the most basic initialization of a proxy :
- * memset(), list_init(*), reset_timeouts(*).
- */
-static void init_new_proxy(struct proxy *p)
-{
- memset(p, 0, sizeof(struct proxy));
- LIST_INIT(&p->pendconns);
- LIST_INIT(&p->acl);
- LIST_INIT(&p->http_req_rules);
- LIST_INIT(&p->block_cond);
- LIST_INIT(&p->redirect_rules);
- LIST_INIT(&p->mon_fail_cond);
- LIST_INIT(&p->switching_rules);
- LIST_INIT(&p->persist_rules);
- LIST_INIT(&p->sticking_rules);
- LIST_INIT(&p->storersp_rules);
- LIST_INIT(&p->tcp_req.inspect_rules);
- LIST_INIT(&p->tcp_rep.inspect_rules);
- LIST_INIT(&p->tcp_req.l4_rules);
- LIST_INIT(&p->req_add);
- LIST_INIT(&p->rsp_add);
- LIST_INIT(&p->listener_queue);
-
- /* Timeouts are defined as -1 */
- proxy_reset_timeouts(p);
- p->tcp_rep.inspect_delay = TICK_ETERNITY;
-}
-
void init_default_instance()
{
init_new_proxy(&defproxy);
@@ -1278,18 +1250,9 @@
err_code |= ERR_ALERT | ERR_ABORT;
goto out;
}
- curpeers->peers_fe->parent = curpeers;
- LIST_INIT(&(curpeers->peers_fe)->pendconns);
- LIST_INIT(&(curpeers->peers_fe)->acl);
- LIST_INIT(&(curpeers->peers_fe)->block_cond);
- LIST_INIT(&(curpeers->peers_fe)->redirect_rules);
- LIST_INIT(&(curpeers->peers_fe)->mon_fail_cond);
- LIST_INIT(&(curpeers->peers_fe)->switching_rules);
- LIST_INIT(&(curpeers->peers_fe)->tcp_req.inspect_rules);
- LIST_INIT(&(curpeers->peers_fe)->tcp_rep.inspect_rules);
-
- proxy_reset_timeouts(curpeers->peers_fe);
+ init_new_proxy(curpeers->peers_fe);
+ curpeers->peers_fe->parent = curpeers;
curpeers->peers_fe->last_change = now.tv_sec;
curpeers->peers_fe->id = strdup(args[1]);
diff --git a/src/dumpstats.c b/src/dumpstats.c
index 9699985..9caebdd 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -153,18 +153,7 @@
if (!fe)
return NULL;
- LIST_INIT(&fe->pendconns);
- LIST_INIT(&fe->acl);
- LIST_INIT(&fe->block_cond);
- LIST_INIT(&fe->redirect_rules);
- LIST_INIT(&fe->mon_fail_cond);
- LIST_INIT(&fe->switching_rules);
- LIST_INIT(&fe->tcp_req.inspect_rules);
-
- /* Timeouts are defined as -1, so we cannot use the zeroed area
- * as a default value.
- */
- proxy_reset_timeouts(fe);
+ init_new_proxy(fe);
fe->last_change = now.tv_sec;
fe->id = strdup("GLOBAL");
diff --git a/src/proxy.c b/src/proxy.c
index 7c22a75..3b56c86 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -403,6 +403,35 @@
return 0;
}
+/* Perform the most basic initialization of a proxy :
+ * memset(), list_init(*), reset_timeouts(*).
+ * Any new proxy should be initialized via this function.
+ */
+void init_new_proxy(struct proxy *p)
+{
+ memset(p, 0, sizeof(struct proxy));
+ LIST_INIT(&p->pendconns);
+ LIST_INIT(&p->acl);
+ LIST_INIT(&p->http_req_rules);
+ LIST_INIT(&p->block_cond);
+ LIST_INIT(&p->redirect_rules);
+ LIST_INIT(&p->mon_fail_cond);
+ LIST_INIT(&p->switching_rules);
+ LIST_INIT(&p->persist_rules);
+ LIST_INIT(&p->sticking_rules);
+ LIST_INIT(&p->storersp_rules);
+ LIST_INIT(&p->tcp_req.inspect_rules);
+ LIST_INIT(&p->tcp_rep.inspect_rules);
+ LIST_INIT(&p->tcp_req.l4_rules);
+ LIST_INIT(&p->req_add);
+ LIST_INIT(&p->rsp_add);
+ LIST_INIT(&p->listener_queue);
+
+ /* Timeouts are defined as -1 */
+ proxy_reset_timeouts(p);
+ p->tcp_rep.inspect_delay = TICK_ETERNITY;
+}
+
/*
* This function creates all proxy sockets. It should be done very early,
* typically before privileges are dropped. The sockets will be registered