+static void yaz_panic_alarm(int sig)
+{
+ const char *cp = "backtrace: backtrace hangs\n";
+
+ write(yaz_panic_fd, cp, strlen(cp));
+ yaz_invoke_gdb();
+ abort();
+}
+
+static void yaz_invoke_backtrace(void)
+{
+ int fd = yaz_panic_fd;
+ void *backtrace_info[BACKTRACE_SZ];
+ int sz = BACKTRACE_SZ;
+
+ signal(SIGALRM, yaz_panic_alarm);
+ alarm(1);
+ sz = backtrace(backtrace_info, sz);
+ backtrace_symbols_fd(backtrace_info, sz, fd);
+}
+