X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fbacktrace.c;h=2ed7385c9ff8c2c3a2b9860bcf53d598d224a2f2;hb=de94629a46584eafe114f740ed3000b26dd42ffb;hp=76e890f3180e4516c19bbe793483fd0150146344;hpb=55b4bc7eb9295ce335fad273d08d82d62ce4b7ea;p=yaz-moved-to-github.git diff --git a/src/backtrace.c b/src/backtrace.c index 76e890f..2ed7385 100644 --- a/src/backtrace.c +++ b/src/backtrace.c @@ -54,11 +54,16 @@ static void yaz_invoke_backtrace(char *buf, int buf_sz) sz = backtrace(backtrace_info, sz); backtrace_symbols_fd(backtrace_info, sz, fd); - pipe(fds); + if (pipe(fds) == -1) + { + const char *cp = "backtrace: pipe failed\n"; + write(fd, cp, strlen(cp)); + return; + } pid = fork(); if (pid == (pid_t) (-1)) { /* error */ - const char *cp = "backtrace: fork failure"; + const char *cp = "backtrace: fork failure\n"; write(fd, cp, strlen(cp)); } else if (pid == 0) @@ -66,7 +71,7 @@ static void yaz_invoke_backtrace(char *buf, int buf_sz) char *arg[20]; int arg_no = 0; char pidstr[40]; - const char *cp = "backtrace: could not exec gdb"; + const char *cp = "backtrace: could not exec gdb\n"; close(fds[1]); close(0); @@ -159,6 +164,9 @@ void yaz_enable_panic_backtrace(const char *progname) strncpy(static_progname, progname, sizeof(static_progname) - 1); static_progname[sizeof(static_progname) - 1] = '\0'; #if HAVE_EXECINFO_H + void *bt[1]; + backtrace(bt, 1); + signal(SIGABRT, yaz_panic_sig_handler); signal(SIGSEGV, yaz_panic_sig_handler); signal(SIGFPE, yaz_panic_sig_handler);