From f2f3f5cbde7c1b27f7eaeefd7165d8780fcc11d7 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Fri, 21 Dec 2012 14:59:35 -0800 Subject: [PATCH] tests: Fix memory leaks in test-classifier program. Signed-off-by: Ben Pfaff Acked-by: Ethan Jackson --- tests/test-classifier.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/tests/test-classifier.c b/tests/test-classifier.c index 79ca29c45..b1461ffe4 100644 --- a/tests/test-classifier.c +++ b/tests/test-classifier.c @@ -95,6 +95,15 @@ test_rule_from_cls_rule(const struct cls_rule *rule) return rule ? CONTAINER_OF(rule, struct test_rule, cls_rule) : NULL; } +static void +test_rule_destroy(struct test_rule *rule) +{ + if (rule) { + cls_rule_destroy(&rule->cls_rule); + free(rule); + } +} + static struct test_rule *make_rule(int wc_fields, unsigned int priority, int value_pat); static void free_rule(struct test_rule *); @@ -122,7 +131,7 @@ tcls_destroy(struct tcls *tcls) size_t i; for (i = 0; i < tcls->n_rules; i++) { - free(tcls->rules[i]); + test_rule_destroy(tcls->rules[i]); } free(tcls->rules); } @@ -172,9 +181,11 @@ tcls_remove(struct tcls *cls, const struct test_rule *rule) for (i = 0; i < cls->n_rules; i++) { struct test_rule *pos = cls->rules[i]; if (pos == rule) { - free(pos); + test_rule_destroy(pos); + memmove(&cls->rules[i], &cls->rules[i + 1], sizeof *cls->rules * (cls->n_rules - i - 1)); + cls->n_rules--; return; } @@ -1221,6 +1232,8 @@ test_minimask_has_extra(int argc OVS_UNUSED, char *argv[] OVS_UNUSED) minimask_destroy(&minimask); } + + minimask_destroy(&minicatchall); } static void @@ -1260,6 +1273,8 @@ test_minimask_combine(int argc OVS_UNUSED, char *argv[] OVS_UNUSED) minimask_destroy(&minimask); minimask_destroy(&minimask2); } + + minimask_destroy(&minicatchall); } static const struct command commands[] = { -- 2.43.0