fix crashes in crash handler being handled by DoCleanShutdown

This commit is contained in:
Glenn Maynard
2007-01-24 11:38:29 +00:00
parent 2f8079fae9
commit 0b26020d96
3 changed files with 26 additions and 8 deletions
+16 -1
View File
@@ -71,8 +71,23 @@ SaveSignals::~SaveSignals()
static void SigHandler( int signal, siginfo_t *si, void *ucp )
{
bool bMaskSignal = false;
for( unsigned i = 0; i < handlers.size(); ++i )
handlers[i]( signal, si, (const ucontext_t *)ucp );
bMaskSignal |= handlers[i]( signal, si, (const ucontext_t *)ucp );
if( !bMaskSignal )
{
struct sigaction sa;
sa.sa_flags = 0;
sigemptyset( &sa.sa_mask );
/* Set up the default signal handler. */
sa.sa_handler = SIG_DFL;
struct sigaction old;
sigaction( signal, &sa, &old );
raise( signal );
sigaction( signal, &old, NULL );
}
}
int find_stack_direction2( char *p )
+1 -1
View File
@@ -15,7 +15,7 @@ public:
namespace SignalHandler
{
typedef void (*handler)( int, siginfo_t *si, const ucontext_t *uc );
typedef bool (*handler)( int, siginfo_t *si, const ucontext_t *uc );
void OnClose( handler );
void ResetSignalHandlers();