From: Willy Tarreau Date: Fri, 11 Jul 2025 06:58:48 +0000 (+0200) Subject: MEDIUM: proxy: register a post-section cleanup function X-Git-Tag: v3.3-dev4~83 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=abcc73830f1c29cfb3cc7a85bfb091a30113baa5;p=thirdparty%2Fhaproxy.git MEDIUM: proxy: register a post-section cleanup function For listen/frontend/backend, we now want to be able to clean up the default-server directive that's no longer used past the end of the section. For this we register a post-section function and perform the cleanup there. --- diff --git a/src/proxy.c b/src/proxy.c index c6f17eb19..680e046eb 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -2818,6 +2818,30 @@ void proxy_adjust_all_maxconn() } } +/* releases what's no longer needed after a proxy section covering . + * Returns an error code made of ERR_*, or 0 on success. + */ +static int post_section_px_cleanup() +{ + if ((curproxy->cap & PR_CAP_LISTEN) && !(curproxy->cap & PR_CAP_DEF)) { + /* This is a regular proxy (not defaults). It doesn't need + * to keep a default-server section if it still had one. We + * want to keep it for defaults however, obviously. + */ + + if (curproxy->defsrv) { + ha_free((char **)&curproxy->defsrv->conf.file); + ha_free(&curproxy->defsrv); + } + } + return 0; +} + +REGISTER_CONFIG_POST_SECTION("frontend", post_section_px_cleanup); +REGISTER_CONFIG_POST_SECTION("backend", post_section_px_cleanup); +REGISTER_CONFIG_POST_SECTION("listen", post_section_px_cleanup); +REGISTER_CONFIG_POST_SECTION("defaults", post_section_px_cleanup); + /* Config keywords below */ static struct cfg_kw_list cfg_kws = {ILH, {