static int _panic_on_free(UNUSED char *foo)
{
- fr_fault(SIGUSR1);
+ fr_fault(SIGABRT);
return -1; /* this should make the free fail */
}
*
* @param sig caught
*/
-void fr_fault(int sig)
+NEVER_RETURNS void fr_fault(int sig)
{
char cmd[sizeof(panic_action) + 20];
char *out = cmd;
* as it may interfere with the operation of the debugger.
* If something calls us directly we just raise the signal and let
* the debugger handle it how it wants.
- *
- * The only exception are SIGUSR1 and SIGUSR2 which print out various
- * debugging info, and should be allowed to continue.
*/
- if ((fr_debug_state == DEBUG_STATE_ATTACHED) && (sig != SIGUSR1) && (sig != SIGUSR2)) {
+ if (fr_debug_state == DEBUG_STATE_ATTACHED) {
FR_FAULT_LOG("RAISING SIGNAL: %s", strsignal(sig));
raise(sig);
goto finish;
FR_FAULT_LOG("Panic action exited with %i", code);
finish:
-#ifdef SIGUSR1
- if (sig == SIGUSR1) {
- return;
- }
-#endif
fr_exit_now(1);
}
return 0;
}
-/** Signal handler to print out a talloc memory report
- *
- * @param sig caught
- */
-static void _fr_fault_mem_report(int sig)
-{
- FR_FAULT_LOG("CAUGHT SIGNAL: %s", strsignal(sig));
-
- if (fr_log_talloc_report(NULL) < 0) fr_perror("memreport");
-}
static int _fr_disable_null_tracking(UNUSED bool *p)
{
case DEBUG_STATE_ATTACHED:
break;
}
-#ifdef SIGUSR1
- if (fr_set_signal(SIGUSR1, fr_fault) < 0) return -1;
-#endif
-
-#ifdef SIGUSR2
- if (fr_set_signal(SIGUSR2, _fr_fault_mem_report) < 0) return -1;
-#endif
/*
* Needed for memory reports
{
if (!cond) {
FR_FAULT_LOG("SOFT ASSERT FAILED %s[%u]: %s", file, line, expr);
-#if !defined(NDEBUG) && defined(SIGUSR1)
- fr_fault(SIGUSR1);
+#if !defined(NDEBUG)
+ fr_fault(SIGABRT);
#endif
return false;
}