Browse Source

rbtree: fix memory leak in tests

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.
Rusty Russell 15 years ago
parent
commit
8d20b53ecd
2 changed files with 15 additions and 4 deletions
  1. 6 2
      ccan/rbtree/test/run-many.c
  2. 9 2
      ccan/rbtree/test/run.c

+ 6 - 2
ccan/rbtree/test/run-many.c

@@ -66,9 +66,9 @@ static void delete_all(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);
@@ -95,6 +95,10 @@ int main(void)
 	/* 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();
 }

+ 9 - 2
ccan/rbtree/test/run.c

@@ -12,11 +12,11 @@ static void *insert_callback(void *param, void *data)
 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 */
-	plan_tests(18);
+	plan_tests(19);
 
 	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);
+	talloc_free(data2);
 
 	/* Delete. */
+	data2 = trbt_lookup32(rb, 1);
 	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);
 
+	/* No memory leaks? */
+	ok1(talloc_total_blocks(ctx) == 1);
+	talloc_free(ctx);
+
 	/* This exits depending on whether all tests passed */
 	return exit_status();
 }