svn commit: samba r17413 - in branches/SAMBA_4_0/source/lib/talloc: .

metze at samba.org metze at samba.org
Sat Aug 5 05:43:47 GMT 2006


Author: metze
Date: 2006-08-05 05:43:47 +0000 (Sat, 05 Aug 2006)
New Revision: 17413

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17413

Log:
add a new case for the this:

top->level1->level2->level3

level3 has a deny destructor
talloc_free(level1)

result: top->level3

metze
Modified:
   branches/SAMBA_4_0/source/lib/talloc/testsuite.c


Changeset:
Modified: branches/SAMBA_4_0/source/lib/talloc/testsuite.c
===================================================================
--- branches/SAMBA_4_0/source/lib/talloc/testsuite.c	2006-08-05 05:03:10 UTC (rev 17412)
+++ branches/SAMBA_4_0/source/lib/talloc/testsuite.c	2006-08-05 05:43:47 UTC (rev 17413)
@@ -95,7 +95,20 @@
 	} \
 } while (0)
 
+#define CHECK_PARENT(ptr, parent) do { \
+	if (talloc_parent(ptr) != (parent)) { \
+		printf(__location__ " failed: '%s' has wrong parent: got %p  expected %p\n", \
+		       #ptr, \
+		       talloc_parent(ptr), \
+		       (parent)); \
+		talloc_report_full(ptr, stdout); \
+		talloc_report_full(parent, stdout); \
+		talloc_report_full(NULL, stdout); \
+		return False; \
+	} \
+} while (0)
 
+
 /*
   test references 
 */
@@ -771,7 +784,12 @@
 	c1 = talloc_named_const(p1, 1, "child");
 	talloc_reference(p2, c1);
 
+	CHECK_PARENT(c1, p1);
+
 	talloc_free(p1);
+
+	CHECK_PARENT(c1, p2);
+
 	talloc_unlink(p2, c1);
 
 	CHECK_SIZE(root, 1);
@@ -888,7 +906,29 @@
 	return True;
 }
 
+static BOOL test_free_parent_deny_child(void)
+{
+	char *top = talloc_new(NULL);
+	char *level1;
+	char *level2;
+	char *level3;
 
+	printf("TESTING TALLOC FREE PARENT DENY CHILD\n");
+	level1 = talloc_strdup(top, "level1");
+	level2 = talloc_strdup(level1, "level2");
+	level3 = talloc_strdup(level2, "level3");
+
+	talloc_set_destructor(level3, fail_destructor);
+	talloc_free(level1);
+	talloc_set_destructor(level3, NULL);
+
+	CHECK_PARENT(level3, top);
+
+	talloc_free(top);
+
+	return True;
+}
+
 BOOL torture_local_talloc(struct torture_context *torture) 
 {
 	BOOL ret = True;
@@ -909,6 +949,7 @@
 	ret &= test_type();
 	ret &= test_lifeless();
 	ret &= test_loop();
+	ret &= test_free_parent_deny_child();
 	if (ret) {
 		ret &= test_speed();
 	}



More information about the samba-cvs mailing list