From 66894d80edb2b01274124ffad3a4426ff9d8c3ae Mon Sep 17 00:00:00 2001 From: Steve Checkoway Date: Wed, 16 May 2007 08:07:49 +0000 Subject: [PATCH] CRASH_HANDLER is always defined for OS X. Make sure that we _exit() after fatal signals. (Initialize the crash handler while I'm at it since that's likely to be needed for the x86 crash handler, which I can't really write without an x86.) --- stepmania/src/arch/ArchHooks/ArchHooks_darwin.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/stepmania/src/arch/ArchHooks/ArchHooks_darwin.cpp b/stepmania/src/arch/ArchHooks/ArchHooks_darwin.cpp index 01268b9cdd..3a65e1a24f 100644 --- a/stepmania/src/arch/ArchHooks/ArchHooks_darwin.cpp +++ b/stepmania/src/arch/ArchHooks/ArchHooks_darwin.cpp @@ -37,7 +37,6 @@ static bool DoCleanShutdown( int signal, siginfo_t *si, const ucontext_t *uc ) return true; } -#if defined(CRASH_HANDLER) static bool DoCrashSignalHandler( int signal, siginfo_t *si, const ucontext_t *uc ) { /* Don't dump a debug file if the user just hit ^C. */ @@ -47,17 +46,22 @@ static bool DoCrashSignalHandler( int signal, siginfo_t *si, const ucontext_t *u CrashHandler::CrashSignalHandler( signal, si, uc ); return true; // Unreached } -#endif + +static bool DoEmergencyShutdown( int signal, siginfo_t *si, const ucontext_t *us ) +{ + if( IsFatalSignal(signal) ) + _exit( 1 ); // We ran the crash handler already + return false; +} void ArchHooks_darwin::Init() { /* First, handle non-fatal termination signals. */ SignalHandler::OnClose( DoCleanShutdown ); - -#if defined(CRASH_HANDLER) CrashHandler::CrashHandlerHandleArgs( g_argc, g_argv ); + CrashHandler::InitializeCrashHandler(); SignalHandler::OnClose( DoCrashSignalHandler ); -#endif + SignalHandler::OnClose( DoEmergencyShutdown ); // CF*Copy* functions' return values need to be released, CF*Get* functions' do not. CFStringRef key = CFSTR( "ApplicationBundlePath" );