mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-28 15:42:30 +00:00
[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.
This commit is contained in:
parent
918ff608f8
commit
237250cc0d
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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");
|
||||
|
29
src/proxy.c
29
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
|
||||
|
Loading…
Reference in New Issue
Block a user