return TRUE;
}
+#ifndef DISABLE_SIGNAL_HANDLER
/**
* Handle SIGSEGV/SIGILL signals raised by threads
*/
DBG1(DBG_DMN, "killing ourself, received critical signal");
abort();
}
+#endif /* DISABLE_SIGNAL_HANDLER */
/**
* Print command line usage and exit
/* handle all arguments */
handle_arguments(argc, argv, FALSE);
- /* add handler for SEGV and ILL,
- * INT, TERM and HUP are handled by sigwaitinfo() in run() */
- action.sa_handler = segv_handler;
+ /* add handler for fatal signals,
+ * INT, TERM, HUP and USR1 are handled by sigwaitinfo() in run() */
action.sa_flags = 0;
sigemptyset(&action.sa_mask);
sigaddset(&action.sa_mask, SIGINT);
sigaddset(&action.sa_mask, SIGTERM);
sigaddset(&action.sa_mask, SIGHUP);
sigaddset(&action.sa_mask, SIGUSR1);
+
+ /* optionally let the external system handle fatal signals */
+#ifndef DISABLE_SIGNAL_HANDLER
+ action.sa_handler = segv_handler;
sigaction(SIGSEGV, &action, NULL);
sigaction(SIGILL, &action, NULL);
sigaction(SIGBUS, &action, NULL);
+#endif /* DISABLE_SIGNAL_HANDLER */
+
action.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &action, NULL);
}
}
+#ifndef DISABLE_SIGNAL_HANDLER
/**
* Handle SIGSEGV/SIGILL signals raised by threads
*/
DBG1(DBG_DMN, "killing ourself, received critical signal");
abort();
}
+#endif /* DISABLE_SIGNAL_HANDLER */
/**
* Lookup UID and GID
goto deinit;
}
- /* add handler for SEGV and ILL,
+ /* add handler for fatal signals,
* INT and TERM are handled by sigwaitinfo() in run() */
- action.sa_handler = segv_handler;
action.sa_flags = 0;
sigemptyset(&action.sa_mask);
sigaddset(&action.sa_mask, SIGINT);
sigaddset(&action.sa_mask, SIGTERM);
+
+ /* optionally let the external system handle fatal signals */
+#ifndef DISABLE_SIGNAL_HANDLER
+ action.sa_handler = segv_handler;
sigaction(SIGSEGV, &action, NULL);
sigaction(SIGILL, &action, NULL);
sigaction(SIGBUS, &action, NULL);
+#endif /* DISABLE_SIGNAL_HANDLER */
+
action.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &action, NULL);
return TRUE;
}
+#ifndef DISABLE_SIGNAL_HANDLER
/**
* Handle SIGSEGV/SIGILL signals raised by threads
*/
DBG1(DBG_DMN, "killing ourself, received critical signal");
abort();
}
+#endif /* DISABLE_SIGNAL_HANDLER */
/**
* Add namespace alias
goto error;
}
- /* add handler for SEGV and ILL,
+ /* add handler for fatal signals,
* INT, TERM and HUP are handled by sigwaitinfo() in run() */
- action.sa_handler = segv_handler;
action.sa_flags = 0;
sigemptyset(&action.sa_mask);
sigaddset(&action.sa_mask, SIGINT);
sigaddset(&action.sa_mask, SIGTERM);
sigaddset(&action.sa_mask, SIGHUP);
+
+ /* optionally let the external system handle fatal signals */
+#ifndef DISABLE_SIGNAL_HANDLER
+ action.sa_handler = segv_handler;
sigaction(SIGSEGV, &action, NULL);
sigaction(SIGILL, &action, NULL);
sigaction(SIGBUS, &action, NULL);
+#endif /* DISABLE_SIGNAL_HANDLER */
+
action.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &action, NULL);
}
}
+#ifndef DISABLE_SIGNAL_HANDLER
/**
* Handle SIGSEGV/SIGILL signals raised by threads
*/
DBG1(DBG_DMN, "killing ourself, received critical signal");
abort();
}
+#endif /* DISABLE_SIGNAL_HANDLER */
/**
* Lookup UID and GID
/* register TKM credential encoder */
lib->encoding->add_encoder(lib->encoding, tkm_encoder_encode);
- /* add handler for SEGV and ILL,
+ /* add handler for fatal signals,
* INT and TERM are handled by sigwaitinfo() in run() */
- action.sa_handler = segv_handler;
action.sa_flags = 0;
sigemptyset(&action.sa_mask);
sigaddset(&action.sa_mask, SIGINT);
sigaddset(&action.sa_mask, SIGTERM);
+
+ /* optionally let the external system handle fatal signals */
+#ifndef DISABLE_SIGNAL_HANDLER
+ action.sa_handler = segv_handler;
sigaction(SIGSEGV, &action, NULL);
sigaction(SIGILL, &action, NULL);
sigaction(SIGBUS, &action, NULL);
+#endif /* DISABLE_SIGNAL_HANDLER */
+
action.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &action, NULL);
/**
* Handle SIGSEGV/SIGILL signals raised by threads
*/
+#ifndef DISABLE_SIGNAL_HANDLER
static void segv_handler(int signal)
{
backtrace_t *backtrace;
DBG1(DBG_DMN, "killing ourself, received critical signal");
abort();
}
+#endif /* DISABLE_SIGNAL_HANDLER */
/**
* Check/create PID file, return TRUE if already running
goto deinit;
}
- /* add handler for SEGV and ILL,
+ /* add handler for fatal signals,
* INT, TERM and HUP are handled by sigwaitinfo() in run() */
- action.sa_handler = segv_handler;
action.sa_flags = 0;
sigemptyset(&action.sa_mask);
sigaddset(&action.sa_mask, SIGINT);
sigaddset(&action.sa_mask, SIGTERM);
sigaddset(&action.sa_mask, SIGHUP);
+
+ /* optionally let the external system handle fatal signals */
+#ifndef DISABLE_SIGNAL_HANDLER
+ action.sa_handler = segv_handler;
sigaction(SIGSEGV, &action, NULL);
sigaction(SIGILL, &action, NULL);
sigaction(SIGBUS, &action, NULL);
+#endif /* DISABLE_SIGNAL_HANDLER */
+
action.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &action, NULL);