projects
/
yaz-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Version 5.14.7
[yaz-moved-to-github.git]
/
src
/
backtrace.c
diff --git
a/src/backtrace.c
b/src/backtrace.c
index
76e890f
..
2ed7385
100644
(file)
--- 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);
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 */
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)
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];
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);
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
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);
signal(SIGABRT, yaz_panic_sig_handler);
signal(SIGSEGV, yaz_panic_sig_handler);
signal(SIGFPE, yaz_panic_sig_handler);