From: Simon Horman Date: Fri, 15 Jul 2011 04:14:09 +0000 (+0900) Subject: [MINOR] Free tcp rules on denint() X-Git-Tag: v1.5-dev8~187 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ac8214260ec61dd6c51b36611595fdb3836ba3ec;p=thirdparty%2Fhaproxy.git [MINOR] Free tcp rules on denint() 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. --- diff --git a/src/haproxy.c b/src/haproxy.c index 321769515b..da9f8c63d0 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -66,6 +66,8 @@ #include #include +#include +#include #include #include @@ -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;