diff --git a/stepmania/src/archutils/Unix/SignalHandler.cpp b/stepmania/src/archutils/Unix/SignalHandler.cpp index 63c8894c29..4b1043b287 100644 --- a/stepmania/src/archutils/Unix/SignalHandler.cpp +++ b/stepmania/src/archutils/Unix/SignalHandler.cpp @@ -18,7 +18,8 @@ extern "C" int sigaltstack( const struct sigaltstack *ss, struct sigaltstack *os static vector handlers; SaveSignals *saved_sigs; -static int signals[] = { +static int signals[] = +{ SIGALRM, SIGBUS, SIGFPE, SIGHUP, SIGILL, SIGINT, SIGABRT, SIGQUIT, SIGSEGV, SIGTRAP, SIGTERM, SIGVTALRM, SIGXCPU, SIGXFSZ, #if defined(HAVE_DECL_SIGPWR) && HAVE_DECL_SIGPWR @@ -166,6 +167,18 @@ void SignalHandler::OnClose(handler h) handlers.push_back(h); } +/* Revert to the default signal handler. This is called */ +void SignalHandler::ResetSignalHandlers() +{ + struct sigaction sa; + sa.sa_flags = 0; + sigemptyset(&sa.sa_mask); + + /* Set up the default signal handler. */ + sa.sa_handler = SIG_DFL; + for(int i = 0; signals[i] != -1; ++i) + sigaction( signals[i], &sa, NULL ); +} /* Written by Glenn Maynard. Public domain, copyrighting a simple signal handler * is dumb. */ diff --git a/stepmania/src/archutils/Unix/SignalHandler.h b/stepmania/src/archutils/Unix/SignalHandler.h index 983b58206e..d87fe548df 100644 --- a/stepmania/src/archutils/Unix/SignalHandler.h +++ b/stepmania/src/archutils/Unix/SignalHandler.h @@ -18,6 +18,7 @@ namespace SignalHandler typedef void (*handler)( int, siginfo_t *si, const ucontext_t *uc ); void OnClose(handler); + void ResetSignalHandlers(); }; #endif