log/stack: Propagate original signal

Issue: 4550

This commit modifies the "stack trace on signal" to propagate the
original signal received instead of always raising SIGABRT.
pull/6979/head
Jeff Lucovsky 5 years ago
parent b5166bdb93
commit a3443845fb

@ -306,6 +306,9 @@ static void SignalHandlerUnexpected(int sig_num, siginfo_t *info, void *context)
{ {
char msg[SC_LOG_MAX_LOG_MSG_LEN]; char msg[SC_LOG_MAX_LOG_MSG_LEN];
unw_cursor_t cursor; unw_cursor_t cursor;
/* Restore defaults for signals to avoid loops */
signal(SIGABRT, SIG_DFL);
signal(SIGSEGV, SIG_DFL);
int r; int r;
if ((r = unw_init_local(&cursor, (unw_context_t *)(context)) != 0)) { if ((r = unw_init_local(&cursor, (unw_context_t *)(context)) != 0)) {
fprintf(stderr, "unable to obtain stack trace: unw_init_local: %s\n", unw_strerror(r)); fprintf(stderr, "unable to obtain stack trace: unw_init_local: %s\n", unw_strerror(r));
@ -338,9 +341,8 @@ static void SignalHandlerUnexpected(int sig_num, siginfo_t *info, void *context)
SCLogError(SC_ERR_SIGNAL, "%s", msg); SCLogError(SC_ERR_SIGNAL, "%s", msg);
terminate: terminate:
// Terminate with SIGABRT ... but first, restore that signal's default handling // Propagate signal to watchers, if any
signal(SIGABRT, SIG_DFL); kill(0, sig_num);
abort();
} }
#undef UNW_LOCAL_ONLY #undef UNW_LOCAL_ONLY
#endif /* HAVE_LIBUNWIND */ #endif /* HAVE_LIBUNWIND */

Loading…
Cancel
Save