summaryrefslogtreecommitdiff
path: root/lib/talloc
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2011-07-29 11:57:07 +1000
committerAndrew Tridgell <tridge@samba.org>2011-07-29 11:30:13 +0200
commitd004fd0b53fb6f3ae64f0e24cf51f4471d434574 (patch)
tree8090589e096c829592a8e4b05b763ea75ae9d0ea /lib/talloc
parent52182a528117c4dd9624f64b34a873c0903ad70a (diff)
downloadsamba-d004fd0b53fb6f3ae64f0e24cf51f4471d434574.tar.gz
samba-d004fd0b53fb6f3ae64f0e24cf51f4471d434574.tar.bz2
samba-d004fd0b53fb6f3ae64f0e24cf51f4471d434574.zip
talloc: added test suite for talloc_free_children()
this tests the fix from Simo Autobuild-User: Andrew Tridgell <tridge@samba.org> Autobuild-Date: Fri Jul 29 11:30:13 CEST 2011 on sn-devel-104
Diffstat (limited to 'lib/talloc')
-rw-r--r--lib/talloc/testsuite.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/talloc/testsuite.c b/lib/talloc/testsuite.c
index 90417c6ade..b038d340d1 100644
--- a/lib/talloc/testsuite.c
+++ b/lib/talloc/testsuite.c
@@ -1320,6 +1320,48 @@ static bool test_rusty(void)
return true;
}
+static bool test_free_children(void)
+{
+ void *root;
+ const char *p1, *p2, *name, *name2;
+
+ talloc_enable_null_tracking();
+ root = talloc_new(NULL);
+ p1 = talloc_strdup(root, "foo1");
+ p2 = talloc_strdup(p1, "foo2");
+
+ talloc_set_name(p1, "%s", "testname");
+ talloc_free_children(p1);
+ /* check its still a valid talloc ptr */
+ talloc_get_size(talloc_get_name(p1));
+ if (strcmp(talloc_get_name(p1), "testname") != 0) {
+ return false;
+ }
+
+ talloc_set_name(p1, "%s", "testname");
+ name = talloc_get_name(p1);
+ talloc_free_children(p1);
+ /* check its still a valid talloc ptr */
+ talloc_get_size(talloc_get_name(p1));
+ torture_assert("name", name == talloc_get_name(p1), "name ptr changed");
+ torture_assert("namecheck", strcmp(talloc_get_name(p1), "testname") == 0,
+ "wrong name");
+ CHECK_BLOCKS("name1", p1, 2);
+
+ /* note that this does not free the old child name */
+ talloc_set_name_const(p1, "testname2");
+ name2 = talloc_get_name(p1);
+ /* but this does */
+ talloc_free_children(p1);
+ torture_assert("namecheck", strcmp(talloc_get_name(p1), "testname2") == 0,
+ "wrong name");
+ CHECK_BLOCKS("name1", p1, 1);
+
+ talloc_report_full(root, stdout);
+ talloc_free(root);
+ return true;
+}
+
static void test_reset(void)
{
@@ -1379,6 +1421,8 @@ bool torture_local_talloc(struct torture_context *tctx)
ret &= test_free_ref_null_context();
test_reset();
ret &= test_rusty();
+ test_reset();
+ ret &= test_free_children();
if (ret) {
test_reset();