The motivation for this is that when soft-restart is merged it will be come more important to free all relevant memory in deinit()
Discovered using valgrind. --- src/haproxy.c | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-) diff --git a/src/haproxy.c b/src/haproxy.c index 3217695..da9f8c6 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -66,6 +66,8 @@ #include <types/capture.h> #include <types/global.h> +#include <types/proto_tcp.h> +#include <types/acl.h> #include <proto/auth.h> #include <proto/acl.h> @@ -672,6 +674,29 @@ void init(int argc, char **argv) } +static void deinit_tcp_rules(struct list *rules) +{ + struct tcp_rule *trule, *truleb; + struct acl_term_suite *suite, *suiteb; + struct acl_term *term, *termb; + + list_for_each_entry_safe(trule, truleb, rules, list) { + if (trule->cond) { + list_for_each_entry_safe(suite, suiteb, &trule->cond->suites, list) { + list_for_each_entry_safe(term, termb, &suite->terms, list) { + LIST_DEL(&term->list); + free(term); + } + LIST_DEL(&suite->list); + free(suite); + } + } + LIST_DEL(&trule->list); + free(trule->cond); + free(trule); + } +} + void deinit(void) { struct proxy *p = proxy, *p0; @@ -791,6 +816,9 @@ void deinit(void) free(rdr); } + deinit_tcp_rules(&p->tcp_req.inspect_rules); + deinit_tcp_rules(&p->tcp_req.l4_rules); + free(p->appsession_name); h = p->req_cap; -- 1.7.5.4