diff --git a/include/haproxy/action.h b/include/haproxy/action.h index 5d751ac42..eed440d8e 100644 --- a/include/haproxy/action.h +++ b/include/haproxy/action.h @@ -34,6 +34,7 @@ struct dns_counters; int act_resolution_cb(struct resolv_requester *requester, struct dns_counters *counters); int act_resolution_error_cb(struct resolv_requester *requester, int error_code); const char *action_suggest(const char *word, const struct list *keywords, const char **extra); +void free_act_rule(struct act_rule *rule); static inline struct action_kw *action_lookup(struct list *keywords, const char *kw) { diff --git a/src/action.c b/src/action.c index 1de97692e..d4aecc8c0 100644 --- a/src/action.c +++ b/src/action.c @@ -301,16 +301,22 @@ struct act_rule *new_act_rule(enum act_from from, const char *file, int linenum) return rule; } +/* fees rule and its elements as well as the condition */ +void free_act_rule(struct act_rule *rule) +{ + LIST_DELETE(&rule->list); + free_acl_cond(rule->cond); + if (rule->release_ptr) + rule->release_ptr(rule); + free(rule->conf.file); + free(rule); +} + void free_act_rules(struct list *rules) { struct act_rule *rule, *ruleb; list_for_each_entry_safe(rule, ruleb, rules, list) { - LIST_DELETE(&rule->list); - free_acl_cond(rule->cond); - if (rule->release_ptr) - rule->release_ptr(rule); - free(rule->conf.file); - free(rule); + free_act_rule(rule); } }