diff options
-rw-r--r-- | source3/lib/tallocmsg.c | 84 | ||||
-rwxr-xr-x | source3/wscript_build | 1 |
2 files changed, 9 insertions, 76 deletions
diff --git a/source3/lib/tallocmsg.c b/source3/lib/tallocmsg.c index 9a0ce8ada1..18b16edfc8 100644 --- a/source3/lib/tallocmsg.c +++ b/source3/lib/tallocmsg.c @@ -18,65 +18,7 @@ #include "includes.h" #include "messages.h" - -/** - * @file tallocmsg.c - * - * Glue code between talloc profiling and the Samba messaging system. - **/ - -struct msg_pool_usage_state { - TALLOC_CTX *mem_ctx; - ssize_t len; - size_t buflen; - char *s; -}; - -static void msg_pool_usage_helper(const void *ptr, int depth, int max_depth, int is_ref, void *_s) -{ - const char *name = talloc_get_name(ptr); - struct msg_pool_usage_state *state = (struct msg_pool_usage_state *)_s; - - if (is_ref) { - sprintf_append(state->mem_ctx, &state->s, &state->len, &state->buflen, - "%*sreference to: %s\n", depth*4, "", name); - return; - } - - if (depth == 0) { - sprintf_append(state->mem_ctx, &state->s, &state->len, &state->buflen, - "%stalloc report on '%s' (total %6lu bytes in %3lu blocks)\n", - (max_depth < 0 ? "full " :""), name, - (unsigned long)talloc_total_size(ptr), - (unsigned long)talloc_total_blocks(ptr)); - return; - } - - if (strcmp(name, "char") == 0) { - /* - * Print out the first 50 bytes of the string - */ - sprintf_append(state->mem_ctx, &state->s, &state->len, - &state->buflen, - "%*s%-30s contains %6lu bytes in %3lu blocks " - "(ref %d): %*s\n", depth*4, "", - name, - (unsigned long)talloc_total_size(ptr), - (unsigned long)talloc_total_blocks(ptr), - talloc_reference_count(ptr), - MIN(50, talloc_get_size(ptr)), - (const char *)ptr); - return; - } - - sprintf_append(state->mem_ctx, &state->s, &state->len, &state->buflen, - "%*s%-30s contains %6lu bytes in %3lu blocks (ref %d)\n", - depth*4, "", - name, - (unsigned long)talloc_total_size(ptr), - (unsigned long)talloc_total_blocks(ptr), - talloc_reference_count(ptr)); -} +#include "lib/util/talloc_report.h" /** * Respond to a POOL_USAGE message by sending back string form of memory @@ -88,31 +30,21 @@ static void msg_pool_usage(struct messaging_context *msg_ctx, struct server_id src, DATA_BLOB *data) { - struct msg_pool_usage_state state; + char *report; SMB_ASSERT(msg_type == MSG_REQ_POOL_USAGE); DEBUG(2,("Got POOL_USAGE\n")); - state.mem_ctx = talloc_init("msg_pool_usage"); - if (!state.mem_ctx) { - return; - } - state.len = 0; - state.buflen = 512; - state.s = NULL; - - talloc_report_depth_cb(NULL, 0, -1, msg_pool_usage_helper, &state); + report = talloc_report_str(msg_ctx, NULL); - if (!state.s) { - talloc_destroy(state.mem_ctx); - return; + if (report != NULL) { + messaging_send_buf(msg_ctx, src, MSG_POOL_USAGE, + (uint8_t *)report, + talloc_get_size(report)-1); } - messaging_send_buf(msg_ctx, src, MSG_POOL_USAGE, - (uint8 *)state.s, strlen(state.s)+1); - - talloc_destroy(state.mem_ctx); + talloc_free(report); } /** diff --git a/source3/wscript_build b/source3/wscript_build index 151e68be6f..d166d4e0ed 100755 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -369,6 +369,7 @@ bld.SAMBA3_SUBSYSTEM('samba3core', server_id_db messages_util messages_dgm + talloc_report TDB_LIB''') bld.SAMBA3_LIBRARY('smbd_shim', |