From 85bf271fb827a31b68d761a06a92972aa6548338 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Mon, 12 Oct 2020 19:50:17 +0200 Subject: [PATCH] Update Client.cpp, Log.cpp, and 4 more files... --- td/telegram/Client.cpp | 7 +++++++ td/telegram/Log.cpp | 5 +++++ td/telegram/Log.h | 2 ++ tdutils/td/utils/logging.cpp | 13 ++++++++++++- tdutils/td/utils/logging.h | 1 + test/main.cpp | 8 +++++--- 6 files changed, 32 insertions(+), 4 deletions(-) diff --git a/td/telegram/Client.cpp b/td/telegram/Client.cpp index 7037582ef..2c590ce31 100644 --- a/td/telegram/Client.cpp +++ b/td/telegram/Client.cpp @@ -20,6 +20,10 @@ #include "td/utils/port/RwMutex.h" #include "td/utils/port/thread.h" +#ifndef _WIN32 +#include "td/utils/death_handler.h" +#endif + #include #include #include @@ -616,6 +620,9 @@ Client::Client(Client &&other) = default; Client &Client::operator=(Client &&other) = default; ClientManager::ClientManager() : impl_(std::make_unique()) { + #ifndef _WIN32 + Debug::DeathHandler dh; + #endif } ClientManager::ClientId ClientManager::create_client() { diff --git a/td/telegram/Log.cpp b/td/telegram/Log.cpp index 194d16d21..c0722d5af 100644 --- a/td/telegram/Log.cpp +++ b/td/telegram/Log.cpp @@ -67,4 +67,9 @@ void Log::set_fatal_error_callback(FatalErrorCallbackPtr callback) { } } +void Log::set_disable_death_handler(bool disabled) { + std::lock_guard lock(log_mutex); + set_log_disable_death_handler(disabled); +} + } // namespace td diff --git a/td/telegram/Log.h b/td/telegram/Log.h index 14923ab4e..2eddef2ab 100644 --- a/td/telegram/Log.h +++ b/td/telegram/Log.h @@ -80,6 +80,8 @@ class Log { * Pass nullptr to remove the callback. */ static void set_fatal_error_callback(FatalErrorCallbackPtr callback); + + static void set_disable_death_handler(bool disabled); }; } // namespace td diff --git a/tdutils/td/utils/logging.cpp b/tdutils/td/utils/logging.cpp index 937cc279c..600e8c686 100644 --- a/tdutils/td/utils/logging.cpp +++ b/tdutils/td/utils/logging.cpp @@ -278,10 +278,16 @@ LogInterface *log_interface = default_log_interface; static OnFatalErrorCallback on_fatal_error_callback = nullptr; +static bool use_death_handler = true; + void set_log_fatal_error_callback(OnFatalErrorCallback callback) { on_fatal_error_callback = callback; } +void set_log_disable_death_handler(bool disabled) { + use_death_handler = !disabled; +} + void process_fatal_error(CSlice message) { auto callback = on_fatal_error_callback; if (callback) { @@ -292,7 +298,12 @@ void process_fatal_error(CSlice message) { std::abort(); #else struct sigaction sa{}; - Debug::DeathHandler::HandleSignal(SIGABRT, &sa, nullptr); + + if (use_death_handler) { + Debug::DeathHandler::HandleSignal(SIGABRT, &sa, nullptr); + } else { + std::abort(); + } #endif #else std::abort(); diff --git a/tdutils/td/utils/logging.h b/tdutils/td/utils/logging.h index 00c62169b..1b971f5e1 100644 --- a/tdutils/td/utils/logging.h +++ b/tdutils/td/utils/logging.h @@ -199,6 +199,7 @@ extern LogInterface *log_interface; using OnFatalErrorCallback = void (*)(CSlice message); void set_log_fatal_error_callback(OnFatalErrorCallback callback); +void set_log_disable_death_handler(bool disabled); [[noreturn]] void process_fatal_error(CSlice message); diff --git a/test/main.cpp b/test/main.cpp index 995656134..bea34dec7 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -10,6 +10,7 @@ #include "td/utils/OptionParser.h" #include "td/utils/Slice.h" #include "td/utils/tests.h" +#include "td/telegram/Log.h" #ifndef _WIN32 #include "td/utils/death_handler.h" @@ -20,9 +21,10 @@ #endif int main(int argc, char **argv) { -#ifndef _WIN32 - Debug::DeathHandler dh; -#endif + #ifndef _WIN32 + td::Log::set_disable_death_handler(true); + Debug::DeathHandler dh; + #endif td::init_openssl_threads(); td::TestsRunner &runner = td::TestsRunner::get_default();