s4:auth Move struct auth_usersupplied_info to a common location
[samba.git] / lib / talloc / testsuite.c
index 8845d960c15423ac409ca083babeb3790eb70eb4..5e9b3ec8f23d3c5b6f448b2dd8ed2e7590f8171b 100644 (file)
@@ -25,7 +25,7 @@
 
 #include "replace.h"
 #include "system/time.h"
-#include "talloc.h"
+#include <talloc.h>
 
 static struct timeval timeval_current(void)
 {
@@ -518,6 +518,7 @@ static bool test_misc(void)
 
        CHECK_SIZE("misc", NULL, 0);
 
+       talloc_enable_null_tracking_no_autofree();
        talloc_enable_leak_report();
        talloc_enable_leak_report_full();
 
@@ -1131,12 +1132,43 @@ static bool test_pool(void)
        return true;
 }
 
+
+static bool test_free_ref_null_context(void)
+{
+       void *p1, *p2, *p3;
+       int ret;
+
+       talloc_disable_null_tracking();
+       p1 = talloc_new(NULL);
+       p2 = talloc_new(NULL);
+
+       p3 = talloc_reference(p2, p1);
+       torture_assert("reference", p3 == p1, "failed: reference on null");
+
+       ret = talloc_free(p1);
+       torture_assert("ref free with null parent", ret == 0, "failed: free with null parent");
+       talloc_free(p2);
+
+       talloc_enable_null_tracking_no_autofree();
+       p1 = talloc_new(NULL);
+       p2 = talloc_new(NULL);
+
+       p3 = talloc_reference(p2, p1);
+       torture_assert("reference", p3 == p1, "failed: reference on null");
+
+       ret = talloc_free(p1);
+       torture_assert("ref free with null tracked parent", ret == 0, "failed: free with null parent");
+       talloc_free(p2);
+
+       return true;
+}
+
 static void test_reset(void)
 {
        talloc_set_log_fn(test_log_stdout);
        test_abort_stop();
        talloc_disable_null_tracking();
-       talloc_enable_null_tracking();
+       talloc_enable_null_tracking_no_autofree();
 }
 
 struct torture_context;
@@ -1184,6 +1216,8 @@ bool torture_local_talloc(struct torture_context *tctx)
        ret &= test_talloc_free_in_destructor();
        test_reset();
        ret &= test_pool();
+       test_reset();
+       ret &= test_free_ref_null_context();
 
        if (ret) {
                test_reset();