diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-09-26 04:59:03 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:59:16 -0500 |
commit | ec0128ef012f4280b2fb607cb9c88c7673894fe6 (patch) | |
tree | fc65803a8480aadec1c778ce486617ce751e1c46 /source4/include | |
parent | 9a62dce0ac2dd751c9cc3b9906eec8c4fe7c51b7 (diff) | |
download | samba-ec0128ef012f4280b2fb607cb9c88c7673894fe6.tar.gz samba-ec0128ef012f4280b2fb607cb9c88c7673894fe6.tar.bz2 samba-ec0128ef012f4280b2fb607cb9c88c7673894fe6.zip |
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)
Diffstat (limited to 'source4/include')
-rw-r--r-- | source4/include/talloc.h | 14 |
1 files changed, 12 insertions, 2 deletions
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) |