int fds[2];
void *backtrace_info[BACKTRACE_SZ];
int sz = BACKTRACE_SZ;
- int left = buf_sz - strlen(buf);
- yaz_snprintf(buf + strlen(buf), left, "backtrace: PID=" NMEM_INT_PRINTF
- "\n", (nmem_int_t) getpid());
write(fd, buf, strlen(buf));
-
sz = backtrace(backtrace_info, sz);
backtrace_symbols_fd(backtrace_info, sz, fd);
pid_t s = waitpid(pid, &status, WNOHANG);
if (s != 0)
break;
- if (sec == 2)
+ if (sec == 9)
kill(pid, SIGTERM);
- if (sec == 3)
+ if (sec == 10)
kill(pid, SIGKILL);
- if (sec == 4)
+ if (sec == 11)
break;
+ if (sec > 3)
+ write(fds[1], "quit\n", 5);
sleep(1);
- write(fds[1], "quit\n", 5);
sec++;
}
close(fds[1]);
char buf[512];
signal(SIGABRT, SIG_DFL);
- strcpy(buf, "\nyaz_panic_sig_handlet received ");
+ strcpy(buf, "\nYAZ panic received ");
switch (sig)
{
case SIGSEGV:
- strcat(buf, "SIGSEGV\n");
+ strcat(buf, "SIGSEGV");
break;
case SIGABRT:
- strcat(buf, "SIGABRT\n");
+ strcat(buf, "SIGABRT");
break;
case SIGFPE:
- strcat(buf, "SIGFPE\n");
+ strcat(buf, "SIGFPE");
break;
case SIGBUS:
- strcat(buf, "SIGBUS\n");
+ strcat(buf, "SIGBUS");
break;
default:
- yaz_snprintf(buf + strlen(buf), sizeof buf, "signo=%d\n", sig);
+ yaz_snprintf(buf + strlen(buf), sizeof buf, "signo=%d", sig);
break;
}
+ yaz_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf) - 1,
+ " PID=" NMEM_INT_PRINTF "\n", (nmem_int_t) getpid());
yaz_invoke_backtrace(buf, sizeof buf);
abort();
}