From ec0128ef012f4280b2fb607cb9c88c7673894fe6 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 26 Sep 2004 04:59:03 +0000 Subject: r2649: - used some cpp tricks to make users of talloc() and talloc_realloc() to get auto-naming of pointers very cheaply. - fixed a couple of memory leaks found with the new tricks A typical exit report for smbd is now: talloc report on 'null_context' (total 811 bytes in 54 blocks) auth/auth_sam.c:334 contains 20 bytes in 1 blocks struct auth_serversupplied_info contains 498 bytes in 33 blocks UNNAMED contains 8 bytes in 1 blocks lib/data_blob.c:40 contains 16 bytes in 1 blocks iconv(CP850,UTF8) contains 61 bytes in 4 blocks iconv(UTF8,CP850) contains 61 bytes in 4 blocks iconv(UTF8,UTF-16LE) contains 67 bytes in 4 blocks iconv(UTF-16LE,UTF8) contains 67 bytes in 4 blocks UNNAMED contains 13 bytes in 1 blocks which is much better than before (This used to be commit 6e721393d03afd3c2f8ced8422533547a9e33342) --- source4/include/talloc.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'source4/include') diff --git a/source4/include/talloc.h b/source4/include/talloc.h index 5af7fd1da0..9f7281f427 100644 --- a/source4/include/talloc.h +++ b/source4/include/talloc.h @@ -24,10 +24,20 @@ /* this is only needed for compatibility with the old talloc */ typedef void TALLOC_CTX; +/* + this uses a little trick to allow __LINE__ to be stringified +*/ +#define _STRING_LINE_(s) #s +#define _STRING_LINE2_(s) _STRING_LINE_(s) +#define __LINESTR__ _STRING_LINE2_(__LINE__) +#define __location__ __FILE__ ":" __LINESTR__ + /* useful macros for creating type checked pointers */ +#define talloc(ctx, size) talloc_named_const(ctx, size, __location__) +#define talloc_realloc(ptr, size) _talloc_realloc(ptr, size, __location__) #define talloc_p(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type) -#define talloc_array_p(ctx, type, count) (type *)talloc_array(ctx, sizeof(type), count) -#define talloc_realloc_p(p, type, count) (type *)talloc_realloc_array(p, sizeof(type), count) +#define talloc_array_p(ctx, type, count) (type *)talloc_array(ctx, sizeof(type), count, __location__) +#define talloc_realloc_p(p, type, count) (type *)talloc_realloc_array(p, sizeof(type), count, __location__) #define talloc_destroy(ctx) talloc_free(ctx) -- cgit