|
@@ -33,6 +33,7 @@
|
|
|
#include <stdlib.h>
|
|
|
#include <unistd.h>
|
|
|
#include <signal.h>
|
|
|
+#include <execinfo.h>
|
|
|
#include "console/engineAPI.h"
|
|
|
#include "core/util/journal/process.h"
|
|
|
#ifndef TORQUE_DEDICATED
|
|
@@ -59,21 +60,15 @@ static void CheckExitCode(S64 exitCode)
|
|
|
//-----------------------------------------------------------------------------
|
|
|
static void SignalHandler(int sigtype)
|
|
|
{
|
|
|
- if (sigtype == SIGSEGV || sigtype == SIGTRAP)
|
|
|
- {
|
|
|
- signal(SIGSEGV, SIG_DFL);
|
|
|
- signal(SIGTRAP, SIG_DFL);
|
|
|
- // restore the signal handling to default so that we don't get into
|
|
|
- // a crash loop with ImmediateShutdown
|
|
|
- ImmediateShutdown(-sigtype, sigtype);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- signal(sigtype, SIG_DFL);
|
|
|
- dPrintf("Unknown signal caught by SignalHandler: %d\n", sigtype);
|
|
|
- // exit to be safe
|
|
|
- ImmediateShutdown(1);
|
|
|
- }
|
|
|
+ void* array[10];
|
|
|
+ size_t size;
|
|
|
+
|
|
|
+ size = backtrace(array, 10);
|
|
|
+
|
|
|
+ dPrintf("Error: signal: % d\n", sigtype);
|
|
|
+ backtrace_symbols_fd(array, size, STDERR_FILENO);
|
|
|
+ // exit to be safe
|
|
|
+ ImmediateShutdown(1);
|
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|