New server option -b to specify the name of a file to which backtrace should be writt...
[citadel.git] / citadel / sysdep.c
index fd7441c451d460513729279c4148b470e991a65a..3caa2dcfc004dfa3573ba19c30f2844ce70dfeb4 100644 (file)
@@ -55,14 +55,26 @@ static RETSIGTYPE signal_cleanup(int signum) {
        int bt_size;
        char **bt_syms;
        int i;
+       FILE *backtrace_fp = NULL;
+
+       if (backtrace_filename != NULL) {
+               backtrace_fp = fopen(backtrace_filename, "w");
+       }
 
        bt_size = backtrace(bt, 1024);
        bt_syms = backtrace_symbols(bt, bt_size);
        for (i = 1; i < bt_size; i++) {
                syslog(LOG_DEBUG, "%s", bt_syms[i]);
+               if (backtrace_fp) {
+                       fprintf(backtrace_fp, "%s\n", bt_syms[i]);
+               }
        }
        free(bt_syms);
 
+       if (backtrace_fp) {
+               fclose(backtrace_fp);
+       }
+
        exit_signal = signum;
        server_shutting_down = 1;
 }