From 73b5be5de6aeaf97c5c3599cc80d3c24b655132e Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Sat, 14 Dec 2002 00:57:45 +0000 Subject: The name pointer in the talloc context must not be a talloced entry as calling talloc_destroy_pool(as we do sometimes) will destroy it. Jeremy. (This used to be commit bcd22a9039b0fb3697ebc4377898cc7ecfd853cc) --- source3/lib/talloc.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/source3/lib/talloc.c b/source3/lib/talloc.c index 0f293e1725..5fffe58f9f 100644 --- a/source3/lib/talloc.c +++ b/source3/lib/talloc.c @@ -138,6 +138,7 @@ TALLOC_CTX *talloc_init(void) * Create a new talloc context, with a name specifying its purpose. * Please call this in preference to talloc_init(). **/ + TALLOC_CTX *talloc_init_named(char const *fmt, ...) { TALLOC_CTX *t; @@ -145,9 +146,18 @@ TALLOC_CTX *talloc_init(void) t = talloc_init(); if (t && fmt) { + /* + * t->name must not be talloced. + * as destroying the pool would destroy it. JRA. + */ + t->name = NULL; va_start(ap, fmt); - t->name = talloc_vasprintf(t, fmt, ap); + vasprintf(&t->name, fmt, ap); va_end(ap); + if (!t->name) { + talloc_destroy(t); + t = NULL; + } } return t; @@ -234,6 +244,7 @@ void talloc_destroy(TALLOC_CTX *t) talloc_destroy_pool(t); talloc_disenroll(t); + SAFE_FREE(t->name); memset(t, 0, sizeof(TALLOC_CTX)); SAFE_FREE(t); } @@ -411,7 +422,7 @@ char *talloc_describe_all(TALLOC_CTX *rt) if (it->name) fstrcpy(what, it->name); else - slprintf(what, sizeof what, "@%p", it); + slprintf(what, sizeof(what), "@%p", it); s = talloc_asprintf_append(rt, s, "%-40s %8u %8u\n", what, -- cgit