Be more aggressive about closing the databases during a segfault
authorArt Cancro <ajc@citadel.org>
Sat, 22 Jul 2023 16:09:49 +0000 (07:09 -0900)
committerArt Cancro <ajc@citadel.org>
Sat, 22 Jul 2023 16:09:49 +0000 (07:09 -0900)
citadel/server/sysdep.c

index 3664a79b09f90e461868825877af4e4fae38bd06..798e218d051dc6b6200557bc2141a795bf747dbe 100644 (file)
@@ -45,9 +45,13 @@ volatile int running_as_daemon = 0;
 
 static RETSIGTYPE signal_cleanup(int signum) {
        syslog(LOG_DEBUG, "sysdep: caught signal %d", signum);
-       signal(signum, SIG_DFL);
+       signal(SIGINT, SIG_DFL);
+       signal(SIGHUP, SIG_DFL);
+       signal(SIGTERM, SIG_DFL);
+       signal(SIGSEGV, SIG_DFL);
        exit_signal = signum;
        server_shutting_down = 1;
+       master_cleanup(signum);
 }
 
 
@@ -576,7 +580,7 @@ void sysdep_master_cleanup(void) {
 
 
 pid_t current_child;
-void graceful_shutdown(int signum) {
+void supervisor_process_shutdown(int signum) {
        kill(current_child, signum);
        unlink(file_pid_file);
        exit(0);
@@ -617,7 +621,7 @@ void start_daemon(int unused) {
 
        do {
                current_child = fork();
-               signal(SIGTERM, graceful_shutdown);
+               signal(SIGTERM, supervisor_process_shutdown);
                if (current_child < 0) {
                        perror("fork");
                        exit(errno);