From a50839e1d0ab37ddb8706333ee3a56aa75138d2a Mon Sep 17 00:00:00 2001 From: Steve Checkoway Date: Tue, 7 Sep 2004 12:40:44 +0000 Subject: [PATCH] Remove stubs, const fix --- stepmania/src/archutils/Unix/CrashHandler.cpp | 26 +++++++++---------- stepmania/src/archutils/Unix/CrashHandler.h | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/stepmania/src/archutils/Unix/CrashHandler.cpp b/stepmania/src/archutils/Unix/CrashHandler.cpp index 5e032fce04..2590ba8125 100644 --- a/stepmania/src/archutils/Unix/CrashHandler.cpp +++ b/stepmania/src/archutils/Unix/CrashHandler.cpp @@ -20,6 +20,10 @@ #include "CrashHandler.h" #include "CrashHandlerInternal.h" +#if defined(DARWIN) +# include "../Darwin/DarwinThreadHelpers.h" +#endif + extern const char *g_pCrashHandlerArgv0; static void safe_print(int fd, ...) @@ -398,7 +402,6 @@ void ForceCrashHandler( const char *reason ) RunCrashHandler( &crash ); } -#if defined(LINUX) void ForceCrashHandlerDeadlock( const CString& reason, const BacktraceContext *ctx ) { CrashData crash; @@ -415,9 +418,17 @@ void ForceCrashHandlerDeadlock( const CString& reason, const BacktraceContext *c } /* iCrashHandle comes from ThreadImpl_Pthreads::GetThreadId. */ -void ForceCrashHandlerDeadlock( const CString& reason, uint64_t iCrashHandle ) +void ForceCrashHandlerDeadlock( CString reason, uint64_t iCrashHandle ) { BacktraceContext ctx; + + /* How can this possibly work without suspending the thread first? What + * stops the thread from returning from the function it was in when + * GetThreadBacktraceContext was called and then changing the stack? + */ +#if defined(DARWIN) + SuspendThread(iCrashHandle); +#endif if( !GetThreadBacktraceContext( iCrashHandle, &ctx ) ) { reason += "; GetThreadBacktraceContext failed"; @@ -428,17 +439,6 @@ void ForceCrashHandlerDeadlock( const CString& reason, uint64_t iCrashHandle ) _exit(1); } -#else -void ForceCrashHandlerDeadlock( const CString& reason, const BacktraceContext *ctx ) -{ - ForceCrashHandler( reason ); -} - -void ForceCrashHandlerDeadlock( const CString& reason, uint64_t iCrashHandle ) -{ - ForceCrashHandler( reason ); -} -#endif /* XXX test for recursive crashes here (eg. GetBacktrace crashing) */ diff --git a/stepmania/src/archutils/Unix/CrashHandler.h b/stepmania/src/archutils/Unix/CrashHandler.h index 480e525c2b..9c1c0fbe60 100644 --- a/stepmania/src/archutils/Unix/CrashHandler.h +++ b/stepmania/src/archutils/Unix/CrashHandler.h @@ -3,7 +3,7 @@ void ForceCrashHandler( const char *reason ); struct BacktraceContext; -void ForceCrashHandlerDeadlock( CString reason, const BacktraceContext *ctx ); +void ForceCrashHandlerDeadlock( const CString& reason, const BacktraceContext *ctx ); void ForceCrashHandlerDeadlock( CString reason, uint64_t CrashHandle ); void CrashHandlerHandleArgs( int argc, char* argv[] ); void InitializeCrashHandler();