From 4139a7a731f2831963a42b26aac111422be28792 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Mon, 1 Apr 2013 13:22:49 +0200 Subject: Make leak checks usable in tests that do not utilize check * Remove check-specific failure reporting from common_check.c * Check-specific abstraction over memleak checks * Rename common_check.c to leak_check.c --- src/tests/common_check.c | 86 +++++------------------------------------------- 1 file changed, 8 insertions(+), 78 deletions(-) (limited to 'src/tests/common_check.c') diff --git a/src/tests/common_check.c b/src/tests/common_check.c index d845923f..94ca40ff 100644 --- a/src/tests/common_check.c +++ b/src/tests/common_check.c @@ -1,7 +1,7 @@ /* SSSD - Common utilities for check-based tests using talloc. + Memory leak/growth checks for check-based tests using talloc. Authors: Martin Nagy @@ -22,88 +22,18 @@ along with this program. If not, see . */ -#include #include -#include "tests/common.h" -#include "util/util.h" -#include "util/dlinklist.h" - -TALLOC_CTX *global_talloc_context = NULL; - - -struct size_snapshot { - struct size_snapshot *prev; - struct size_snapshot *next; - - TALLOC_CTX *ctx; - size_t bytes_allocated; -}; - -static struct size_snapshot *snapshot_stack; - -void -_check_leaks(TALLOC_CTX *ctx, size_t bytes, const char *location) -{ - size_t bytes_allocated; - - bytes_allocated = talloc_total_size(ctx); - if (bytes_allocated != bytes) { - fprintf(stderr, "Leak report for %s:\n", location); - talloc_report_full(ctx, stderr); - fail("%s: memory leaks detected, %d bytes still allocated", - location, bytes_allocated - bytes); - } -} - -void -check_leaks_push(TALLOC_CTX *ctx) -{ - struct size_snapshot *snapshot; - - snapshot = talloc(NULL, struct size_snapshot); - snapshot->ctx = ctx; - snapshot->bytes_allocated = talloc_total_size(ctx); - DLIST_ADD(snapshot_stack, snapshot); -} - -void -_check_leaks_pop(TALLOC_CTX *ctx, const char *location) -{ - struct size_snapshot *snapshot; - TALLOC_CTX *old_ctx; - size_t bytes_allocated; - - if (snapshot_stack == NULL) { - fail("%s: trying to pop an empty stack"); - } - snapshot = snapshot_stack; - DLIST_REMOVE(snapshot_stack, snapshot); - - old_ctx = snapshot->ctx; - bytes_allocated = snapshot->bytes_allocated; - - fail_if(old_ctx != ctx, "Bad push/pop order"); - - talloc_zfree(snapshot); - _check_leaks(old_ctx, bytes_allocated, location); -} +#include "tests/common.h" -void -leak_check_setup(void) +void ck_leak_check_setup(void) { - talloc_enable_null_tracking(); - global_talloc_context = talloc_new(NULL); - fail_unless(global_talloc_context != NULL, "talloc_new failed"); - check_leaks_push(global_talloc_context); + fail_unless(leak_check_setup() == true, + "Cannot set up leaks test: %s\n", check_leaks_err_msg()); } -void -leak_check_teardown(void) +void ck_leak_check_teardown(void) { - check_leaks_pop(global_talloc_context); - if (snapshot_stack != NULL) { - fail("Exiting with a non-empty stack"); - } - check_leaks(global_talloc_context, 0); + fail_unless(leak_check_teardown() == true, + "Cannot tear down leaks test: %s\n", check_leaks_err_msg()); } -- cgit