diff options
author | Andrew Bartlett <abartlet@samba.org> | 2009-03-20 13:22:08 +1100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2009-03-20 13:22:08 +1100 |
commit | 27c6eca04c4c1bb40ff36f3a08748e2f45770aa8 (patch) | |
tree | f87d3e6ca4958e9b9102ca8ee5fb3e5f0917570e /lib/talloc/talloc.c | |
parent | 1f25b71d199a072f5ee1bdd8786e5c1c157f5888 (diff) | |
parent | 5fe2b28f45289dc5578cdd536600f0d30a14d820 (diff) | |
download | samba-27c6eca04c4c1bb40ff36f3a08748e2f45770aa8.tar.gz samba-27c6eca04c4c1bb40ff36f3a08748e2f45770aa8.tar.bz2 samba-27c6eca04c4c1bb40ff36f3a08748e2f45770aa8.zip |
Merge branch 'master' of ssh://git.samba.org/data/git/samba into wspp-schema
Diffstat (limited to 'lib/talloc/talloc.c')
-rw-r--r-- | lib/talloc/talloc.c | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/lib/talloc/talloc.c b/lib/talloc/talloc.c index c472e9fda9..60a48ad811 100644 --- a/lib/talloc/talloc.c +++ b/lib/talloc/talloc.c @@ -138,14 +138,30 @@ struct talloc_chunk { #define TC_HDR_SIZE ((sizeof(struct talloc_chunk)+15)&~15) #define TC_PTR_FROM_CHUNK(tc) ((void *)(TC_HDR_SIZE + (char*)tc)) +static void (*talloc_abort_fn)(const char *reason); + +void talloc_set_abort_fn(void (*abort_fn)(const char *reason)) +{ + talloc_abort_fn = abort_fn; +} + +static void talloc_abort(const char *reason) +{ + if (!talloc_abort_fn) { + TALLOC_ABORT(reason); + } + + talloc_abort_fn(reason); +} + static void talloc_abort_double_free(void) { - TALLOC_ABORT("Bad talloc magic value - double free"); + talloc_abort("Bad talloc magic value - double free"); } static void talloc_abort_unknown_value(void) { - TALLOC_ABORT("Bad talloc magic value - unknown value"); + talloc_abort("Bad talloc magic value - unknown value"); } /* panic if we get a bad magic value */ @@ -564,7 +580,7 @@ static inline int _talloc_free(void *ptr) pool_object_count = talloc_pool_objectcount(pool); if (*pool_object_count == 0) { - TALLOC_ABORT("Pool object count zero!"); + talloc_abort("Pool object count zero!"); } *pool_object_count -= 1; @@ -810,7 +826,18 @@ static void talloc_abort_type_missmatch(const char *location, const char *name, const char *expected) { - TALLOC_ABORT("Type missmatch"); + const char *reason; + + reason = talloc_asprintf(NULL, + "%s: Type mismatch: name[%s] expected[%s]", + location, + name?name:"NULL", + expected); + if (!reason) { + reason = "Type mismatch"; + } + + talloc_abort(reason); } void *_talloc_get_type_abort(const void *ptr, const char *name, const char *location) |