From 4959c6d454769f4e5d89a3432348d637ac4009f9 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 9 Nov 2015 01:15:34 +0100 Subject: [PATCH] core: Initialize the backtracer early on at start --- src/backtrace.c | 19 +++++++++++++++++-- src/backtrace.h | 1 + src/main.c | 3 +++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/backtrace.c b/src/backtrace.c index 938025b45..052649620 100644 --- a/src/backtrace.c +++ b/src/backtrace.c @@ -28,15 +28,30 @@ #include #include +#ifdef HAVE_BACKTRACE_SUPPORT +#include +#include +#endif + #include "src/log.h" #include "src/backtrace.h" +void btd_backtrace_init(void) +{ #ifdef HAVE_BACKTRACE_SUPPORT -#include -#include + void *frames[1]; + + /* + * initialize the backtracer, since the ctor calls dlopen(), which + * calls malloc(), which isn't signal-safe. + */ + backtrace(frames, 1); +#endif +} void btd_backtrace(uint16_t index) { +#ifdef HAVE_BACKTRACE_SUPPORT char *debuginfo_path = NULL; const Dwfl_Callbacks callbacks = { .find_debuginfo = dwfl_standard_find_debuginfo, diff --git a/src/backtrace.h b/src/backtrace.h index 654d67d37..b3eef6dd9 100644 --- a/src/backtrace.h +++ b/src/backtrace.h @@ -23,6 +23,7 @@ #include +void btd_backtrace_init(void); void btd_backtrace(uint16_t index); void btd_assertion_message_expr(const char *file, int line, diff --git a/src/main.c b/src/main.c index 9124dc55d..2001ceed8 100644 --- a/src/main.c +++ b/src/main.c @@ -48,6 +48,7 @@ #include "gdbus/gdbus.h" #include "log.h" +#include "backtrace.h" #include "lib/uuid.h" #include "hcid.h" @@ -585,6 +586,8 @@ int main(int argc, char *argv[]) umask(0077); + btd_backtrace_init(); + event_loop = g_main_loop_new(NULL, FALSE); signal = setup_signalfd(); -- 2.47.3