From 6c54896a8e316cf53ecaa79e6c999de0535c6bea Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 28 Jun 2013 22:49:03 -0700 Subject: [PATCH] Removing old dangerous signal catching code. * None of the supported platforms are hosed if the program crashes without cleaning up the graphics display connection. * It's very likely to be unsafe to call SDL_Quit() at an arbitrary point from an arbitrary thread. * Catching signals can prevent applications from getting correct stack traces from crashes. --- src/SDL_fatal.c | 103 ------------------------------------------------ 1 file changed, 103 deletions(-) diff --git a/src/SDL_fatal.c b/src/SDL_fatal.c index cf19e57e0..6600df506 100644 --- a/src/SDL_fatal.c +++ b/src/SDL_fatal.c @@ -20,108 +20,6 @@ */ #include "SDL_config.h" -/* General fatal signal handling code for SDL */ - -#ifdef HAVE_SIGNAL_H - -#include - -#include "SDL.h" -#include "SDL_fatal.h" - -/* This installs some signal handlers for the more common fatal signals, - so that if the programmer is lazy, the app doesn't die so horribly if - the program crashes. -*/ - -static void -SDL_Parachute(int sig) -{ - signal(sig, SIG_DFL); - SDL_Quit(); - raise(sig); -} - -static const int SDL_fatal_signals[] = { - SIGSEGV, -#ifdef SIGBUS - SIGBUS, -#endif -#ifdef SIGFPE - SIGFPE, -#endif -#ifdef SIGQUIT - SIGQUIT, -#endif - 0 -}; - -void -SDL_InstallParachute(void) -{ - /* Set a handler for any fatal signal not already handled */ - int i; -#ifdef HAVE_SIGACTION - struct sigaction action; - - for (i = 0; SDL_fatal_signals[i]; ++i) { - sigaction(SDL_fatal_signals[i], NULL, &action); - if (action.sa_handler == SIG_DFL) { - action.sa_handler = SDL_Parachute; - sigaction(SDL_fatal_signals[i], &action, NULL); - } - } -#ifdef SIGALRM - /* Set SIGALRM to be ignored -- necessary on Solaris */ - sigaction(SIGALRM, NULL, &action); - if (action.sa_handler == SIG_DFL) { - action.sa_handler = SIG_IGN; - sigaction(SIGALRM, &action, NULL); - } -#endif -#else - void (*ohandler) (int); - - for (i = 0; SDL_fatal_signals[i]; ++i) { - ohandler = signal(SDL_fatal_signals[i], SDL_Parachute); - if (ohandler != SIG_DFL) { - signal(SDL_fatal_signals[i], ohandler); - } - } -#endif /* HAVE_SIGACTION */ - return; -} - -void -SDL_UninstallParachute(void) -{ - /* Remove a handler for any fatal signal handled */ - int i; -#ifdef HAVE_SIGACTION - struct sigaction action; - - for (i = 0; SDL_fatal_signals[i]; ++i) { - sigaction(SDL_fatal_signals[i], NULL, &action); - if (action.sa_handler == SDL_Parachute) { - action.sa_handler = SIG_DFL; - sigaction(SDL_fatal_signals[i], &action, NULL); - } - } -#else - void (*ohandler) (int); - - for (i = 0; SDL_fatal_signals[i]; ++i) { - ohandler = signal(SDL_fatal_signals[i], SIG_DFL); - if (ohandler != SDL_Parachute) { - signal(SDL_fatal_signals[i], ohandler); - } - } -#endif /* HAVE_SIGACTION */ -} - -#else - -/* No signals on this platform, nothing to do.. */ void SDL_InstallParachute(void) @@ -135,5 +33,4 @@ SDL_UninstallParachute(void) return; } -#endif /* HAVE_SIGNAL_H */ /* vi: set ts=4 sw=4 expandtab: */