rbtree: fix memory leak in tests
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 10 Jan 2011 05:51:24 +0000 (16:21 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 10 Jan 2011 05:51:24 +0000 (16:21 +1030)
The data is not made a child of the tree: the nodes are made children of the
data.  So we must explicitly free the data objects.

ccan/rbtree/test/run-many.c
ccan/rbtree/test/run.c

index a023403064ca4015103b783631d4ee79bb6f51ae..75d2d01e5904edc0d0ec64db913a1d9ec36153b8 100644 (file)
@@ -66,9 +66,9 @@ static void delete_all(trbt_tree_t *rb)
 int main(void)
 {
        trbt_tree_t *rb;
 int main(void)
 {
        trbt_tree_t *rb;
-       void *ctx = talloc_init("toplevel");
+       void *ctx = talloc_strdup(NULL, "toplevel");
 
 
-       plan_tests(7);
+       plan_tests(8);
 
        rb = trbt_create(ctx, 0);
        ok1(rb);
 
        rb = trbt_create(ctx, 0);
        ok1(rb);
@@ -95,6 +95,10 @@ int main(void)
        /* All are children of rb, so this is clean. */
        talloc_free(rb);
 
        /* All are children of rb, so this is clean. */
        talloc_free(rb);
 
+       /* No memory leaks? */
+       ok1(talloc_total_blocks(ctx) == 1);
+       talloc_free(ctx);
+
        /* This exits depending on whether all tests passed */
        return exit_status();
 }
        /* This exits depending on whether all tests passed */
        return exit_status();
 }
index 11d0ed78b015f03b252986ab4ea4cead5cde7ae9..5f58fd05eeb19ee9131a63de1e49e6ed22d0726e 100644 (file)
@@ -12,11 +12,11 @@ static void *insert_callback(void *param, void *data)
 int main(void)
 {
        trbt_tree_t *rb;
 int main(void)
 {
        trbt_tree_t *rb;
-       void *ctx = talloc_init("toplevel");
+       void *ctx = talloc_strdup(NULL, "toplevel");
        char *data, *data2;
 
        /* This is how many tests you plan to run */
        char *data, *data2;
 
        /* This is how many tests you plan to run */
-       plan_tests(18);
+       plan_tests(19);
 
        rb = trbt_create(ctx, 0);
        ok1(rb);
 
        rb = trbt_create(ctx, 0);
        ok1(rb);
@@ -55,16 +55,23 @@ int main(void)
        /* Insert with callback on existing. */
        trbt_insert32_callback(rb, 0, insert_callback, data2);
        ok1(strcmp(trbt_lookup32(rb, 0), "insert_callback") == 0);
        /* Insert with callback on existing. */
        trbt_insert32_callback(rb, 0, insert_callback, data2);
        ok1(strcmp(trbt_lookup32(rb, 0), "insert_callback") == 0);
+       talloc_free(data2);
 
        /* Delete. */
 
        /* Delete. */
+       data2 = trbt_lookup32(rb, 1);
        trbt_delete32(rb, 1);
        ok1(trbt_lookup32(rb, 1) == NULL);
        ok1(trbt_lookup32(rb, 0));
        trbt_delete32(rb, 1);
        ok1(trbt_lookup32(rb, 1) == NULL);
        ok1(trbt_lookup32(rb, 0));
+       talloc_free(data2);
 
        /* This should free everything. */
        talloc_free(trbt_lookup32(rb, 0));
        talloc_free(rb);
 
 
        /* This should free everything. */
        talloc_free(trbt_lookup32(rb, 0));
        talloc_free(rb);
 
+       /* No memory leaks? */
+       ok1(talloc_total_blocks(ctx) == 1);
+       talloc_free(ctx);
+
        /* This exits depending on whether all tests passed */
        return exit_status();
 }
        /* This exits depending on whether all tests passed */
        return exit_status();
 }