- syslog(LOG_DEBUG, "sysdep: caught signal %d; shutting down.", signum);
- exit_signal = signum;
- server_shutting_down = 1;
-}
+ syslog(LOG_DEBUG, "sysdep: caught signal %d - backtrace follows:", signum);
+
+ void *bt[1024];
+ 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);