Update Client.cpp, Log.cpp, and 4 more files...
This commit is contained in:
parent
d3b2f81269
commit
85bf271fb8
@ -20,6 +20,10 @@
|
|||||||
#include "td/utils/port/RwMutex.h"
|
#include "td/utils/port/RwMutex.h"
|
||||||
#include "td/utils/port/thread.h"
|
#include "td/utils/port/thread.h"
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
#include "td/utils/death_handler.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@ -616,6 +620,9 @@ Client::Client(Client &&other) = default;
|
|||||||
Client &Client::operator=(Client &&other) = default;
|
Client &Client::operator=(Client &&other) = default;
|
||||||
|
|
||||||
ClientManager::ClientManager() : impl_(std::make_unique<Impl>()) {
|
ClientManager::ClientManager() : impl_(std::make_unique<Impl>()) {
|
||||||
|
#ifndef _WIN32
|
||||||
|
Debug::DeathHandler dh;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientManager::ClientId ClientManager::create_client() {
|
ClientManager::ClientId ClientManager::create_client() {
|
||||||
|
@ -67,4 +67,9 @@ void Log::set_fatal_error_callback(FatalErrorCallbackPtr callback) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Log::set_disable_death_handler(bool disabled) {
|
||||||
|
std::lock_guard<std::mutex> lock(log_mutex);
|
||||||
|
set_log_disable_death_handler(disabled);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -80,6 +80,8 @@ class Log {
|
|||||||
* Pass nullptr to remove the callback.
|
* Pass nullptr to remove the callback.
|
||||||
*/
|
*/
|
||||||
static void set_fatal_error_callback(FatalErrorCallbackPtr callback);
|
static void set_fatal_error_callback(FatalErrorCallbackPtr callback);
|
||||||
|
|
||||||
|
static void set_disable_death_handler(bool disabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -278,10 +278,16 @@ LogInterface *log_interface = default_log_interface;
|
|||||||
|
|
||||||
static OnFatalErrorCallback on_fatal_error_callback = nullptr;
|
static OnFatalErrorCallback on_fatal_error_callback = nullptr;
|
||||||
|
|
||||||
|
static bool use_death_handler = true;
|
||||||
|
|
||||||
void set_log_fatal_error_callback(OnFatalErrorCallback callback) {
|
void set_log_fatal_error_callback(OnFatalErrorCallback callback) {
|
||||||
on_fatal_error_callback = callback;
|
on_fatal_error_callback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_log_disable_death_handler(bool disabled) {
|
||||||
|
use_death_handler = !disabled;
|
||||||
|
}
|
||||||
|
|
||||||
void process_fatal_error(CSlice message) {
|
void process_fatal_error(CSlice message) {
|
||||||
auto callback = on_fatal_error_callback;
|
auto callback = on_fatal_error_callback;
|
||||||
if (callback) {
|
if (callback) {
|
||||||
@ -292,7 +298,12 @@ void process_fatal_error(CSlice message) {
|
|||||||
std::abort();
|
std::abort();
|
||||||
#else
|
#else
|
||||||
struct sigaction sa{};
|
struct sigaction sa{};
|
||||||
Debug::DeathHandler::HandleSignal(SIGABRT, &sa, nullptr);
|
|
||||||
|
if (use_death_handler) {
|
||||||
|
Debug::DeathHandler::HandleSignal(SIGABRT, &sa, nullptr);
|
||||||
|
} else {
|
||||||
|
std::abort();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
std::abort();
|
std::abort();
|
||||||
|
@ -199,6 +199,7 @@ extern LogInterface *log_interface;
|
|||||||
|
|
||||||
using OnFatalErrorCallback = void (*)(CSlice message);
|
using OnFatalErrorCallback = void (*)(CSlice message);
|
||||||
void set_log_fatal_error_callback(OnFatalErrorCallback callback);
|
void set_log_fatal_error_callback(OnFatalErrorCallback callback);
|
||||||
|
void set_log_disable_death_handler(bool disabled);
|
||||||
|
|
||||||
[[noreturn]] void process_fatal_error(CSlice message);
|
[[noreturn]] void process_fatal_error(CSlice message);
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "td/utils/OptionParser.h"
|
#include "td/utils/OptionParser.h"
|
||||||
#include "td/utils/Slice.h"
|
#include "td/utils/Slice.h"
|
||||||
#include "td/utils/tests.h"
|
#include "td/utils/tests.h"
|
||||||
|
#include "td/telegram/Log.h"
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
#include "td/utils/death_handler.h"
|
#include "td/utils/death_handler.h"
|
||||||
@ -20,9 +21,10 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
Debug::DeathHandler dh;
|
td::Log::set_disable_death_handler(true);
|
||||||
#endif
|
Debug::DeathHandler dh;
|
||||||
|
#endif
|
||||||
td::init_openssl_threads();
|
td::init_openssl_threads();
|
||||||
|
|
||||||
td::TestsRunner &runner = td::TestsRunner::get_default();
|
td::TestsRunner &runner = td::TestsRunner::get_default();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user