diff --git a/include/haproxy/cfgparse.h b/include/haproxy/cfgparse.h index a1476fad6..186ecf75b 100644 --- a/include/haproxy/cfgparse.h +++ b/include/haproxy/cfgparse.h @@ -84,7 +84,6 @@ extern int cfg_maxconn; extern char *cfg_scope; extern struct cfg_kw_list cfg_keywords; extern char *cursection; -extern struct proxy defproxy; int cfg_parse_global(const char *file, int linenum, char **args, int inv); int cfg_parse_listen(const char *file, int linenum, char **args, int inv); diff --git a/src/cfgparse-listen.c b/src/cfgparse-listen.c index edcc04138..ffe793156 100644 --- a/src/cfgparse-listen.c +++ b/src/cfgparse-listen.c @@ -33,6 +33,9 @@ #include #include + +static struct proxy defproxy; /* fake proxy used to assign default values on all instances */ + /* Report a warning if a rule is placed after a 'tcp-request session' rule. * Return 1 if the warning has been emitted, otherwise 0. */ @@ -177,6 +180,12 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) char *errmsg = NULL; struct bind_conf *bind_conf; + if (defproxy.obj_type != OBJ_TYPE_PROXY) { + /* defproxy not initialized yet */ + init_new_proxy(&defproxy); + proxy_preset_defaults(&defproxy); + } + if (strcmp(args[0], "listen") == 0) rc = PR_CAP_LISTEN; else if (strcmp(args[0], "frontend") == 0) diff --git a/src/cfgparse.c b/src/cfgparse.c index 9f76878f0..0ddbab000 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -89,7 +89,6 @@ struct list sections = LIST_HEAD_INIT(sections); struct list postparsers = LIST_HEAD_INIT(postparsers); char *cursection = NULL; -struct proxy defproxy = { }; /* fake proxy used to assign default values on all instances */ int cfg_maxpconn = 0; /* # of simultaneous connections per proxy (-N) */ int cfg_maxconn = 0; /* # of simultaneous connections, (-n) */ char *cfg_scope = NULL; /* the current scope during the configuration parsing */ diff --git a/src/haproxy.c b/src/haproxy.c index 1bac1c51f..69ddb9035 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -1822,9 +1822,6 @@ static void init(int argc, char **argv) global.maxsock = 10; /* reserve 10 fds ; will be incremented by socket eaters */ - init_new_proxy(&defproxy); - proxy_preset_defaults(&defproxy); - /* in wait mode, we don't try to read the configuration files */ if (!(global.mode & MODE_MWORKER_WAIT)) { char *env_cfgfiles = NULL;