X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftalloc%2Ftest%2Frun-external-alloc.c;h=0dc9346075a84a49a53a39ca47d76de6873e7a73;hp=85b3b0140f04d6178ea9efcc3085b1e8752b2294;hb=87aba1fa2abc28ff06f82e30cde3fa3d991e8e18;hpb=6502a8728975624437e172ea6b034b24295ceda5 diff --git a/ccan/talloc/test/run-external-alloc.c b/ccan/talloc/test/run-external-alloc.c index 85b3b014..0dc93460 100644 --- a/ccan/talloc/test/run-external-alloc.c +++ b/ccan/talloc/test/run-external-alloc.c @@ -1,51 +1,53 @@ -#include "talloc/talloc.c" -#include "tap/tap.h" +#include +#include #include -static int ext_alloc_count, ext_free_count, ext_realloc_count; +/* Much testing already done in run.c */ + +static int ext_alloc_count, ext_free_count, ext_realloc_count, lock_count, unlock_count; static void *expected_parent; -static void *ext_alloc(void *parent, size_t size) +static void *ext_realloc(const void *parent, void *ptr, size_t size) { ok1(parent == expected_parent); - ext_alloc_count++; - return malloc(size); + if (ptr == NULL) + ext_alloc_count++; + if (size == 0) + ext_free_count++; + if (ptr && size) + ext_realloc_count++; + return realloc(ptr, size); } -static void ext_free(void *ptr, void *parent) +static void ext_lock(const void *ctx) { - ok1(parent == expected_parent); - ext_free_count++; - free(ptr); + lock_count++; } -static void *ext_realloc(void *ptr, void *parent, size_t size) +static void ext_unlock(void) { - ok1(parent == expected_parent); - ext_realloc_count++; - return realloc(ptr, size); + unlock_count++; } int main(void) { char *p, *p2, *head; - plan_tests(10); + plan_tests(15); - talloc_external_enable(ext_alloc, ext_free, ext_realloc); - head = talloc(NULL, char); + expected_parent = NULL; + head = talloc_add_external(NULL, ext_realloc, ext_lock, ext_unlock); assert(head); - expected_parent = head; - - talloc_mark_external(head); + ok1(ext_alloc_count == 1); + expected_parent = head; p = talloc_array(head, char, 1); - ok1(ext_alloc_count == 1); + ok1(ext_alloc_count == 2); assert(p); /* Child is also externally allocated */ expected_parent = p; p2 = talloc(p, char); - ok1(ext_alloc_count == 2); + ok1(ext_alloc_count == 3); expected_parent = head; p = talloc_realloc(NULL, p, char, 1000); @@ -60,5 +62,11 @@ int main(void) talloc_free(p); ok1(ext_free_count == 2); + expected_parent = NULL; + talloc_free(head); + ok1(ext_free_count == 3); + + ok1(lock_count == unlock_count); + return exit_status(); }