diff --git a/include/proto/filters.h b/include/proto/filters.h index 0cec1dc63..0d3e9acaa 100644 --- a/include/proto/filters.h +++ b/include/proto/filters.h @@ -95,7 +95,6 @@ extern struct pool_head *pool2_filter; -int flt_init(struct proxy *p); void flt_deinit(struct proxy *p); int flt_check(struct proxy *p); diff --git a/src/filters.c b/src/filters.c index 91404a484..14ea0f1f3 100644 --- a/src/filters.c +++ b/src/filters.c @@ -251,7 +251,7 @@ parse_filter(char **args, int section_type, struct proxy *curpx, * the configuration parsing. Filters can finish to fill their config. Returns * (ERR_ALERT|ERR_FATAL) if an error occurs, 0 otherwise. */ -int +static int flt_init(struct proxy *proxy) { struct flt_conf *fconf; @@ -263,6 +263,24 @@ flt_init(struct proxy *proxy) return 0; } +/* Calls flt_init() for all proxies, see above */ +static int +flt_init_all() +{ + struct proxy *px; + int err_code = 0; + + for (px = proxy; px; px = px->next) { + err_code |= flt_init(px); + if (err_code & (ERR_ABORT|ERR_FATAL)) { + Alert("Failed to initialize filters for proxy '%s'.\n", + px->id); + return err_code; + } + } + return 0; +} + /* * Calls 'check' callback for all filters attached to a proxy. This happens * after the configuration parsing but before filters initialization. Returns @@ -1078,6 +1096,7 @@ __filters_init(void) { pool2_filter = create_pool("filter", sizeof(struct filter), MEM_F_SHARED); cfg_register_keywords(&cfg_kws); + hap_register_post_check(flt_init_all); } __attribute__((destructor)) diff --git a/src/haproxy.c b/src/haproxy.c index 5d43cf388..233734154 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -936,15 +936,6 @@ static void init(int argc, char **argv) ha_wurfl_init(); #endif - for (px = proxy; px; px = px->next) { - err_code |= flt_init(px); - if (err_code & (ERR_ABORT|ERR_FATAL)) { - Alert("Failed to initialize filters for proxy '%s'.\n", - px->id); - exit(1); - } - } - list_for_each_entry(pcf, &post_check_list, list) { err_code |= pcf->fct(); if (err_code & (ERR_ABORT|ERR_FATAL))