Try to close the databases if we segfault
authorArt Cancro <ajc@citadel.org>
Sat, 22 Jul 2023 15:53:46 +0000 (06:53 -0900)
committerArt Cancro <ajc@citadel.org>
Sat, 22 Jul 2023 15:53:46 +0000 (06:53 -0900)
citadel/server/sysdep.c

index 21ba4c7b055d1eefce318cf308d1b8d95be6be2b..3664a79b09f90e461868825877af4e4fae38bd06 100644 (file)
@@ -45,6 +45,7 @@ volatile int running_as_daemon = 0;
 
 static RETSIGTYPE signal_cleanup(int signum) {
        syslog(LOG_DEBUG, "sysdep: caught signal %d", signum);
+       signal(signum, SIG_DFL);
        exit_signal = signum;
        server_shutting_down = 1;
 }
@@ -85,11 +86,13 @@ void init_sysdep(void) {
        sigaddset(&set, SIGINT);
        sigaddset(&set, SIGHUP);
        sigaddset(&set, SIGTERM);
+       sigaddset(&set, SIGSEGV);
        sigprocmask(SIG_UNBLOCK, &set, NULL);
 
        signal(SIGINT, signal_cleanup);
        signal(SIGHUP, signal_cleanup);
        signal(SIGTERM, signal_cleanup);
+       signal(SIGSEGV, signal_cleanup);
 
        // Do not shut down the server on broken pipe signals, otherwise the
        // whole Citadel service would come down whenever a single client