Merge branch 'crashlog_improvements' into jgrpp

# Conflicts:
#	src/os/macosx/crashlog_osx.cpp
This commit is contained in:
Jonathan G Rennison
2019-04-23 19:51:09 +01:00
3 changed files with 256 additions and 25 deletions

View File

@@ -341,7 +341,7 @@ class CrashLogUnix : public CrashLog {
args.push_back("-ex");
args.push_back("echo \\nBacktrace:\\n");
args.push_back("-ex");
args.push_back("bt full");
args.push_back("bt full 100");
#ifdef WITH_SIGACTION
if (this->GetMessage() == nullptr && this->signal_instruction_ptr_valid) {
@@ -584,11 +584,22 @@ static void CDECL HandleCrash(int signum)
/* static */ void CrashLog::InitialiseCrashLog()
{
#ifdef WITH_SIGALTSTACK
const size_t stack_size = max<size_t>(SIGSTKSZ, 512*1024);
stack_t ss;
ss.ss_sp = CallocT<byte>(stack_size);
ss.ss_size = stack_size;
ss.ss_flags = 0;
sigaltstack(&ss, nullptr);
#endif
for (const int *i = _signals_to_handle; i != endof(_signals_to_handle); i++) {
#ifdef WITH_SIGACTION
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_flags = SA_SIGINFO | SA_RESTART;
#ifdef WITH_SIGALTSTACK
sa.sa_flags |= SA_ONSTACK;
#endif
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = HandleCrash;
sigaction(*i, &sa, nullptr);