From 3d972da1e68ff950eeb84fd9345a487d71925560 Mon Sep 17 00:00:00 2001 From: Arseny Smirnov Date: Wed, 14 Aug 2019 11:31:25 +0300 Subject: [PATCH] Stacktrace improvements. GitOrigin-RevId: 99dd952cff5c9e5edce575b84e365def24a59441 --- tdutils/td/utils/port/signals.cpp | 1 + tdutils/td/utils/port/stacktrace.cpp | 7 +++++++ tdutils/td/utils/port/stacktrace.h | 2 ++ 3 files changed, 10 insertions(+) diff --git a/tdutils/td/utils/port/signals.cpp b/tdutils/td/utils/port/signals.cpp index 03e823934..4fcf34b82 100644 --- a/tdutils/td/utils/port/signals.cpp +++ b/tdutils/td/utils/port/signals.cpp @@ -306,6 +306,7 @@ static void block_stdin() { } static void default_failure_signal_handler(int sig) { + Stacktrace::init(); signal_safe_write_signal_number(sig); Stacktrace::PrintOptions options; diff --git a/tdutils/td/utils/port/stacktrace.cpp b/tdutils/td/utils/port/stacktrace.cpp index 18f0e372f..384b2d0f6 100644 --- a/tdutils/td/utils/port/stacktrace.cpp +++ b/tdutils/td/utils/port/stacktrace.cpp @@ -114,4 +114,11 @@ void Stacktrace::print_to_stderr(const PrintOptions &options) { print_backtrace(); } +void Stacktrace::init() { +#if __GLIBC__ + void *buffer[1]; + backtrace(buffer, 1); +#endif +} + } // namespace td diff --git a/tdutils/td/utils/port/stacktrace.h b/tdutils/td/utils/port/stacktrace.h index fbc4e78f4..5a16ec01f 100644 --- a/tdutils/td/utils/port/stacktrace.h +++ b/tdutils/td/utils/port/stacktrace.h @@ -16,6 +16,8 @@ class Stacktrace { } }; static void print_to_stderr(const PrintOptions &options = PrintOptions()); + // backtrace needs to be called once to ensure that next calls are async-signal-safe + static void init(); }; } // namespace td