summaryrefslogtreecommitdiff
path: root/source4/lib/data_blob.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-09-26 04:59:03 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:59:16 -0500
commitec0128ef012f4280b2fb607cb9c88c7673894fe6 (patch)
treefc65803a8480aadec1c778ce486617ce751e1c46 /source4/lib/data_blob.c
parent9a62dce0ac2dd751c9cc3b9906eec8c4fe7c51b7 (diff)
downloadsamba-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/lib/data_blob.c')
-rw-r--r--source4/lib/data_blob.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/source4/lib/data_blob.c b/source4/lib/data_blob.c
index e10ebfe606..c8c57849d2 100644
--- a/source4/lib/data_blob.c
+++ b/source4/lib/data_blob.c
@@ -56,6 +56,11 @@ DATA_BLOB data_blob_talloc(TALLOC_CTX *mem_ctx, const void *p, size_t length)
if (ret.data) {
ret.data = talloc_steal(mem_ctx, ret.data);
+ } else {
+ /* this ensures the blob has the context attached, so a zero length call
+ to data_blob_talloc followed by a realloc doesn't cause the memory to come
+ from the NULL context */
+ ret.data = talloc(mem_ctx, 0);
}
return ret;
}