From 351ca44e8b3ea8336abba8215dfc1ccb42458384 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 27 Sep 2004 04:20:18 +0000 Subject: r2674: I have realised that talloc() should have its context marked const, as a const pointer really means that "the data pointed to by this pointer won't change", and that is certainly true of talloc(). The fact that some behind-the-scenes meta-data can change doesn't matter from the point of view of const. this fixes a number of const warnings caused by const data structures being passed as talloc contexts. That will no longer generate a warning. also changed the talloc leak reporting option from --leak-check to --leak-report, as all it does is generate a report on exit. A new --leak-report-full option has been added that shows the complete tree of memory allocations, which is is quite useful in tracking things down. NOTE: I find it quite useful to insert talloc_report_full(ptr, stderr) calls at strategic points in the code while debugging memory allocation problems, particularly before freeing a major context (such as the connection context). This allows you to see if that context has been accumulating too much data, such as per-request data, which should have been freed when the request finished. (This used to be commit c60ff99c3129c26a9204bac1c6e5fb386114a923) --- source4/lib/data_blob.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'source4/lib/data_blob.c') diff --git a/source4/lib/data_blob.c b/source4/lib/data_blob.c index b09148b63e..7803179d39 100644 --- a/source4/lib/data_blob.c +++ b/source4/lib/data_blob.c @@ -51,17 +51,12 @@ DATA_BLOB data_blob_named(const void *p, size_t length, const char *name) /******************************************************************* construct a data blob, using supplied TALLOC_CTX *******************************************************************/ -DATA_BLOB data_blob_talloc(TALLOC_CTX *mem_ctx, const void *p, size_t length) +DATA_BLOB data_blob_talloc_named(TALLOC_CTX *mem_ctx, const void *p, size_t length, const char *name) { - DATA_BLOB ret = data_blob(p, length); + DATA_BLOB ret = data_blob_named(p, length, name); 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); + talloc_steal(mem_ctx, ret.data); } return ret; } -- cgit