diff --git a/include/proto/proxy.h b/include/proto/proxy.h index afcfa0aab..2b5328c68 100644 --- a/include/proto/proxy.h +++ b/include/proto/proxy.h @@ -43,6 +43,7 @@ struct proxy *findproxy_mode(const char *name, int mode, int cap); 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 fd81a203e..04373acf6 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -1020,34 +1020,6 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm) 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,19 +1250,10 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm) err_code |= ERR_ALERT | ERR_ABORT; goto out; } + + init_new_proxy(curpeers->peers_fe); 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); - curpeers->peers_fe->last_change = now.tv_sec; curpeers->peers_fe->id = strdup(args[1]); curpeers->peers_fe->cap = PR_CAP_FE; diff --git a/src/dumpstats.c b/src/dumpstats.c index 96999852c..9caebdd59 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -153,18 +153,7 @@ static struct proxy *alloc_stats_fe(const char *name) 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 7c22a75fc..3b56c86ea 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -403,6 +403,35 @@ int proxy_cfg_ensure_no_http(struct proxy *curproxy) 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