Removing old dangerous signal catching code.
authorSam Lantinga <slouken@libsdl.org>
Fri, 28 Jun 2013 22:49:03 -0700
changeset 7336 b0ef4d043c7b
parent 7335 13b67be8e3af
child 7337 5ba1fafc6a94
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
--- a/src/SDL_fatal.c	Fri Jun 28 22:44:49 2013 -0700
+++ b/src/SDL_fatal.c	Fri Jun 28 22:49:03 2013 -0700
@@ -20,108 +20,6 @@
 */
 #include "SDL_config.h"
 
-/* General fatal signal handling code for SDL */
-
-#ifdef HAVE_SIGNAL_H
-
-#include <signal.h>
-
-#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 @@
     return;
 }
 
-#endif /* HAVE_SIGNAL_H */
 /* vi: set ts=4 sw=4 expandtab: */