lib: Use talloc_report_str
authorVolker Lendecke <vl@samba.org>
Tue, 10 Feb 2015 21:17:44 +0000 (22:17 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 13 Feb 2015 22:32:07 +0000 (23:32 +0100)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source3/lib/tallocmsg.c
source3/wscript_build

index 9a0ce8ada18f324f991f33a457936bc12ae9b6a4..18b16edfc8f8b9f1ba69d90912b09240bbdfcc5a 100644 (file)
 
 #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);
 }
 
 /**
index 151e68be6fcdef728d35b26a4f676faa7d9b0fe6..d166d4e0ed914801e7e2c9470c8e2b4702617f78 100755 (executable)
@@ -369,6 +369,7 @@ bld.SAMBA3_SUBSYSTEM('samba3core',
                         server_id_db
                         messages_util
                         messages_dgm
+                        talloc_report
                         TDB_LIB''')
 
 bld.SAMBA3_LIBRARY('smbd_shim',