From 56293a074b1f6f553809c0e851504b3820f95f25 Mon Sep 17 00:00:00 2001 From: Snaipe Date: Sun, 22 Mar 2015 20:43:14 +0100 Subject: [PATCH] Fixed metadata mishandling in ordered set --- src/ordered-set.c | 3 ++- src/runner.c | 17 +++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/ordered-set.c b/src/ordered-set.c index 6e41a3f..220b56a 100644 --- a/src/ordered-set.c +++ b/src/ordered-set.c @@ -55,7 +55,8 @@ void *insert_ordered_set(struct criterion_ordered_set *l, void *ptr, size_t size struct criterion_ordered_set_node *new = smalloc( .size = sizeof(struct criterion_ordered_set_node) + size, - .dtor = destroy_ordered_set_node + .dtor = destroy_ordered_set_node, + .meta = { &l, sizeof (void *) }, ); if (!new) return NULL; diff --git a/src/runner.c b/src/runner.c index 45a7bf1..baaeee0 100644 --- a/src/runner.c +++ b/src/runner.c @@ -54,7 +54,12 @@ static void dtor_suite_set(void *ptr, UNUSED void *meta) { sfree(s->tests); } -static struct criterion_test_set criterion_init(void) { +static void dtor_test_set(void *ptr, UNUSED void *meta) { + struct criterion_test_set *t = ptr; + sfree(t->suites); +} + +static struct criterion_test_set *criterion_init(void) { struct criterion_ordered_set *suites = new_ordered_set(cmp_suite, dtor_suite_set); FOREACH_SUITE_SEC(s) { @@ -78,10 +83,10 @@ static struct criterion_test_set criterion_init(void) { const size_t nb_tests = SECTION_END(criterion_tests) - SECTION_START(criterion_tests); - return (struct criterion_test_set) { + return unique_ptr(struct criterion_test_set, { suites, nb_tests, - }; + }, dtor_test_set); } typedef void (*f_test_run)(struct criterion_global_stats *, struct criterion_test *, struct criterion_suite *); @@ -167,13 +172,13 @@ static void run_test(struct criterion_global_stats *stats, struct criterion_test } static int criterion_run_all_tests_impl(void) { - struct criterion_test_set set = criterion_init(); + smart struct criterion_test_set *set = criterion_init(); - report(PRE_ALL, &set); + report(PRE_ALL, set); set_runner_pid(); smart struct criterion_global_stats *stats = stats_init(); - map_tests(&set, stats, run_test); + map_tests(set, stats, run_test); if (!is_runner()) return -1;