mirror of
https://github.com/stenzek/duckstation.git
synced 2025-07-28 22:01:59 +00:00
CrashHandler: Fix recursive backtrace on Linux
This commit is contained in:
parent
2b18df0910
commit
634fac4410
@ -82,8 +82,6 @@ extern "C" __attribute__((weak)) void android_set_abort_message(const char*);
|
||||
{
|
||||
#ifndef __ANDROID__
|
||||
std::fputs(szMsg, stderr);
|
||||
CrashHandler::WriteDumpForCaller(szMsg);
|
||||
std::fputs("Aborting application.\n", stderr);
|
||||
std::fflush(stderr);
|
||||
std::abort();
|
||||
#else
|
||||
|
@ -285,6 +285,7 @@ const char* CrashHandler::GetSignalName(int signal_no)
|
||||
// clang-format off
|
||||
case SIGSEGV: return "SIGSEGV";
|
||||
case SIGBUS: return "SIGBUS";
|
||||
case SIGABRT: return "SIGABRT";
|
||||
default: return "UNKNOWN";
|
||||
// clang-format on
|
||||
}
|
||||
@ -391,9 +392,13 @@ void CrashHandler::CrashSignalHandler(int signal, siginfo_t* siginfo, void* ctx)
|
||||
lock.unlock();
|
||||
|
||||
// We can't continue from here. Just bail out and dump core.
|
||||
std::fputs("Aborting application.\n", stderr);
|
||||
std::fflush(stderr);
|
||||
std::abort();
|
||||
static const char abort_message[] = "Aborting application.\n";
|
||||
write(STDERR_FILENO, abort_message, sizeof(abort_message) - 1);
|
||||
|
||||
// Call default abort signal handler, regardless of whether this was SIGSEGV or SIGABRT.
|
||||
lock.lock();
|
||||
std::signal(SIGABRT, SIG_DFL);
|
||||
raise(SIGABRT);
|
||||
}
|
||||
|
||||
bool CrashHandler::Install(CleanupHandler cleanup_handler)
|
||||
@ -412,8 +417,6 @@ bool CrashHandler::Install(CleanupHandler cleanup_handler)
|
||||
return false;
|
||||
if (sigaction(SIGSEGV, &sa, nullptr) != 0)
|
||||
return false;
|
||||
|
||||
sa.sa_flags = SA_SIGINFO;
|
||||
if (sigaction(SIGABRT, &sa, nullptr) != 0)
|
||||
return false;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user