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

metze at samba.org metze at samba.org
Tue May 8 08:49:53 GMT 2007


Author: metze
Date: 2007-05-08 08:49:52 +0000 (Tue, 08 May 2007)
New Revision: 22757

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

Log:
test if calling talloc_free() works on parent elements from within a destrutor

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	2007-05-08 04:38:16 UTC (rev 22756)
+++ branches/SAMBA_4_0/source/lib/talloc/testsuite.c	2007-05-08 08:49:52 UTC (rev 22757)
@@ -993,7 +993,7 @@
 	s4 = talloc_array_ptrtype(top, s4, 10);location4 = __location__;
 
 	if (talloc_get_size(s4) != (sizeof(struct struct1 **) * 10)) {
-		printf("failure: TALLOC PTRTYPE [\n"
+		printf("failure: ptrtype [\n"
 		      "talloc_array_ptrtype() allocated the wrong size "
 		       "%lu (should be %lu)\n]\n",
 			   (unsigned long)talloc_get_size(s4),
@@ -1010,6 +1010,45 @@
 	return true;
 }
 
+static int _test_talloc_free_in_destructor(void **ptr)
+{
+	talloc_free(*ptr);
+	return 0;
+}
+
+static bool test_talloc_free_in_destructor(void)
+{
+	void *level0;
+	void *level1;
+	void *level2;
+	void *level3;
+	void *level4;
+	void **level5;
+
+	printf("test: free_in_destructor [\nTALLOC FREE IN DESTRUCTOR\n]\n");
+
+	level0 = talloc_new(NULL);
+	level1 = talloc_new(level0);
+	level2 = talloc_new(level1);
+	level3 = talloc_new(level2);
+	level4 = talloc_new(level3);
+	level5 = talloc(level4, void *);
+
+	*level5 = level3;
+	(void)talloc_reference(level0, level3);
+	(void)talloc_reference(level3, level3);
+	(void)talloc_reference(level5, level3);
+
+	talloc_set_destructor(level5, _test_talloc_free_in_destructor);
+
+	talloc_free(level1);
+
+	talloc_free(level0);
+
+	printf("success: free_in_destructor\n");
+	return true;
+}
+
 static bool test_autofree(void)
 {
 #if _SAMBA_BUILD_ < 4
@@ -1055,6 +1094,7 @@
 	ret &= test_loop();
 	ret &= test_free_parent_deny_child(); 
 	ret &= test_talloc_ptrtype();
+	ret &= test_talloc_free_in_destructor();
 
 	if (ret) {
 		ret &= test_speed();



More information about the samba-cvs mailing list