improve talloc memory leak debugging

* switch to talloc_report_full() on SIGUSR1
* include asn1-internal allocations in talloc report

Change-Id: I14fff863449971024002e0d5465fb7a964d67095
changes/97/13497/1
Harald Welte 4 years ago
parent 3f09f634e0
commit b54a51eec2
  1. 10
      include/osmocom/rspro/asn_internal.h
  2. 4
      src/bankd_main.c
  3. 3
      src/remsim_client.c
  4. 5
      src/server/remsim_server.c
  5. 3
      src/simtrace2-remsim_client.c

@ -23,10 +23,12 @@ extern "C" {
#define ASN1C_ENVIRONMENT_VERSION 924 /* Compile-time version */
int get_asn1c_environment_version(void); /* Run-time version */
#define CALLOC(nmemb, size) calloc(nmemb, size)
#define MALLOC(size) malloc(size)
#define REALLOC(oldptr, size) realloc(oldptr, size)
#define FREEMEM(ptr) free(ptr)
#include <osmocom/core/talloc.h>
extern __thread void *talloc_asn1_ctx;
#define CALLOC(nmemb, size) talloc_zero_size(talloc_asn1_ctx, (nmemb) * (size))
#define MALLOC(size) talloc_size(talloc_asn1_ctx, size)
#define REALLOC(oldptr, size) talloc_realloc_size(talloc_asn1_ctx, oldptr, size)
#define FREEMEM(ptr) talloc_free(ptr)
#define asn_debug_indent 0
#define ASN_DEBUG_INDENT_ADD(i) do{}while(0)

@ -330,7 +330,7 @@ static void handle_sig_usr1(int sig)
struct bankd_worker *worker;
/* main thread */
fprintf(stderr, "=== Talloc Report of main thread:\n");
talloc_report(g_tall_ctx, stderr);
talloc_report_full(g_tall_ctx, stderr);
/* iterate over worker threads and ask them to dump their talloc state */
pthread_mutex_lock(&g_bankd->workers_mutex);
@ -341,7 +341,7 @@ static void handle_sig_usr1(int sig)
} else {
/* worker thread */
fprintf(stderr, "=== Talloc Report of %s\n", g_worker->name);
talloc_report(g_worker->tall_ctx, stderr);
talloc_report_full(g_worker->tall_ctx, stderr);
}
}

@ -164,7 +164,7 @@ static int srvc_handle_rx(struct rspro_server_conn *srvc, const RsproPDU_t *pdu)
static void handle_sig_usr1(int signal)
{
OSMO_ASSERT(signal == SIGUSR1);
talloc_report(g_tall_ctx, stderr);
talloc_report_full(g_tall_ctx, stderr);
}
static void printf_help()
@ -229,6 +229,7 @@ int main(int argc, char **argv)
int rc;
g_tall_ctx = talloc_named_const(NULL, 0, "global");
talloc_asn1_ctx = talloc_named_const(g_tall_ctx, 0, "asn1");
osmo_init_logging2(g_tall_ctx, &log_info);

@ -15,12 +15,14 @@
struct rspro_server *g_rps;
void *g_tall_ctx;
__thread void *talloc_asn1_ctx;
struct osmo_fd g_event_ofd;
static void handle_sig_usr1(int signal)
{
OSMO_ASSERT(signal == SIGUSR1);
talloc_report(g_tall_ctx, stderr);
talloc_report_full(g_tall_ctx, stderr);
}
int main(int argc, char **argv)
@ -28,6 +30,7 @@ int main(int argc, char **argv)
int rc;
g_tall_ctx = talloc_named_const(NULL, 0, "global");
talloc_asn1_ctx = talloc_named_const(g_tall_ctx, 0, "asn1");
osmo_init_logging2(g_tall_ctx, &log_info);

@ -679,7 +679,7 @@ static int srvc_handle_rx(struct rspro_server_conn *srvc, const RsproPDU_t *pdu)
static void handle_sig_usr1(int signal)
{
OSMO_ASSERT(signal == SIGUSR1);
talloc_report(g_tall_ctx, stderr);
talloc_report_full(g_tall_ctx, stderr);
}
static void print_welcome(void)
@ -817,6 +817,7 @@ int main(int argc, char **argv)
signal(SIGUSR1, handle_sig_usr1);
g_tall_ctx = talloc_named_const(NULL, 0, "global");
talloc_asn1_ctx = talloc_named_const(g_tall_ctx, 0, "asn1");
osmo_init_logging2(g_tall_ctx, &log_info);
rc = libusb_init(NULL);

Loading…
Cancel
Save