From 68fd7e43d35ddcd87c5e1545dd40476222f53d4c Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Thu, 25 Mar 2021 17:15:52 +0100 Subject: [PATCH] REORG: global: move free acl/action in their related source files Move deinit_acl_cond and deinit_act_rules from haproxy.c respectively in acl.c and action.c. The name of the functions has been slightly altered, replacing the prefix deinit_* by free_* to reflect their purpose more clearly. This change has been made in preparation to the implementation of a free proxy function. As a side-effect, it helps to clean up haproxy.c. --- include/haproxy/acl.h | 1 + include/haproxy/action.h | 2 ++ src/acl.c | 20 ++++++++++++++++ src/action.c | 14 +++++++++++ src/haproxy.c | 52 ++++++++-------------------------------- 5 files changed, 47 insertions(+), 42 deletions(-) diff --git a/include/haproxy/acl.h b/include/haproxy/acl.h index cdbf9c025..bd6e1db8b 100644 --- a/include/haproxy/acl.h +++ b/include/haproxy/acl.h @@ -146,6 +146,7 @@ void acl_unregister_keywords(struct acl_kw_list *kwl); */ int init_acl(); +void free_acl_cond(struct acl_cond *cond); #endif /* _HAPROXY_ACL_H */ diff --git a/include/haproxy/action.h b/include/haproxy/action.h index a4bec01eb..845c0fd8b 100644 --- a/include/haproxy/action.h +++ b/include/haproxy/action.h @@ -102,4 +102,6 @@ static inline void release_timeout_action(struct act_rule *rule) release_sample_expr(rule->arg.timeout.expr); } +void free_act_rules(struct list *rules); + #endif /* _HAPROXY_ACTION_H */ diff --git a/src/acl.c b/src/acl.c index cf7dd91a9..7801e2e24 100644 --- a/src/acl.c +++ b/src/acl.c @@ -1302,6 +1302,26 @@ int init_acl() return err; } +void free_acl_cond(struct acl_cond *cond) +{ + struct acl_term_suite *suite, *suiteb; + struct acl_term *term, *termb; + + if (!cond) + return; + + list_for_each_entry_safe(suite, suiteb, &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); + } + + free(cond); +} + /************************************************************************/ /* All supported sample and ACL keywords must be declared here. */ /************************************************************************/ diff --git a/src/action.c b/src/action.c index c81737642..29eae8113 100644 --- a/src/action.c +++ b/src/action.c @@ -10,6 +10,7 @@ * */ +#include #include #include #include @@ -259,3 +260,16 @@ const char *action_suggest(const char *word, const struct list *keywords, const return best_ptr; } + +void free_act_rules(struct list *rules) +{ + struct act_rule *rule, *ruleb; + + list_for_each_entry_safe(rule, ruleb, rules, list) { + LIST_DEL(&rule->list); + free_acl_cond(rule->cond); + if (rule->release_ptr) + rule->release_ptr(rule); + free(rule); + } +} diff --git a/src/haproxy.c b/src/haproxy.c index 1d136e9f5..cf2f8e0f7 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -80,6 +80,7 @@ #include #include +#include #include #include #include @@ -2135,46 +2136,13 @@ static void init(int argc, char **argv) free(err_msg); } -static void deinit_acl_cond(struct acl_cond *cond) -{ - struct acl_term_suite *suite, *suiteb; - struct acl_term *term, *termb; - - if (!cond) - return; - - list_for_each_entry_safe(suite, suiteb, &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); - } - - free(cond); -} - -static void deinit_act_rules(struct list *rules) -{ - struct act_rule *rule, *ruleb; - - list_for_each_entry_safe(rule, ruleb, rules, list) { - LIST_DEL(&rule->list); - deinit_acl_cond(rule->cond); - if (rule->release_ptr) - rule->release_ptr(rule); - free(rule); - } -} - static void deinit_stick_rules(struct list *rules) { struct sticking_rule *rule, *ruleb; list_for_each_entry_safe(rule, ruleb, rules, list) { LIST_DEL(&rule->list); - deinit_acl_cond(rule->cond); + free_acl_cond(rule->cond); release_sample_expr(rule->expr); free(rule); } @@ -2367,13 +2335,13 @@ void deinit(void) free(lf); } - deinit_act_rules(&p->tcp_req.inspect_rules); - deinit_act_rules(&p->tcp_rep.inspect_rules); - deinit_act_rules(&p->tcp_req.l4_rules); - deinit_act_rules(&p->tcp_req.l5_rules); - deinit_act_rules(&p->http_req_rules); - deinit_act_rules(&p->http_res_rules); - deinit_act_rules(&p->http_after_res_rules); + free_act_rules(&p->tcp_req.inspect_rules); + free_act_rules(&p->tcp_rep.inspect_rules); + free_act_rules(&p->tcp_req.l4_rules); + free_act_rules(&p->tcp_req.l5_rules); + free_act_rules(&p->http_req_rules); + free_act_rules(&p->http_res_rules); + free_act_rules(&p->http_after_res_rules); deinit_stick_rules(&p->storersp_rules); deinit_stick_rules(&p->sticking_rules); @@ -2461,7 +2429,7 @@ void deinit(void) free(uap->desc); userlist_free(uap->userlist); - deinit_act_rules(&uap->http_req_rules); + free_act_rules(&uap->http_req_rules); scope = uap->scope; while (scope) {