Better crash signal handling
This commit is contained in:
parent
f6377045c9
commit
5eb7cbff92
1 changed files with 10 additions and 7 deletions
|
|
@ -1,6 +1,7 @@
|
|||
#include <psemek/log/log.hpp>
|
||||
#include <psemek/util/to_string.hpp>
|
||||
#include <psemek/util/exception.hpp>
|
||||
#include <boost/stacktrace/stacktrace.hpp>
|
||||
|
||||
#include <chrono>
|
||||
#include <ctime>
|
||||
|
|
@ -28,8 +29,6 @@ namespace psemek::log
|
|||
std::mutex sinks_mutex;
|
||||
std::vector<std::unique_ptr<sink>> sinks;
|
||||
|
||||
using signal_handler = void(*)(int);
|
||||
|
||||
struct signal_data
|
||||
{
|
||||
int signal;
|
||||
|
|
@ -38,14 +37,17 @@ namespace psemek::log
|
|||
|
||||
signal_data const signals[] =
|
||||
{
|
||||
{SIGSEGV, "Aborting due to SIGSEGV"},
|
||||
{SIGINT, "Aborting due to SIGINT" },
|
||||
{SIGILL, "Aborting due to SIGILL" },
|
||||
{SIGABRT, "Aborting due to SIGABRT"},
|
||||
{SIGFPE, "Aborting due to SIGFPE" },
|
||||
{SIGSEGV, "Aborting due to SIGSEGV"},
|
||||
{SIGTERM, "Aborting due to SIGTERM"},
|
||||
};
|
||||
|
||||
struct sinks_flusher
|
||||
struct signal_handler
|
||||
{
|
||||
sinks_flusher()
|
||||
signal_handler()
|
||||
{
|
||||
for (auto const & p : signals)
|
||||
std::signal(p.signal, &handler);
|
||||
|
|
@ -58,7 +60,8 @@ namespace psemek::log
|
|||
{
|
||||
if (p.signal == signal)
|
||||
{
|
||||
put_message(level::error, p.message);
|
||||
log::error() << p.message;
|
||||
log::error() << boost::stacktrace::stacktrace();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -73,7 +76,7 @@ namespace psemek::log
|
|||
std::signal(signal, SIG_DFL);
|
||||
std::raise(signal);
|
||||
}
|
||||
} flusher;
|
||||
} signal_handler;
|
||||
|
||||
void put_message(level l, std::string const & str, std::string const & thread_name)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue