14 #include <stk_util/diag/Env.hpp> 17 #include <stk_util/util/FeatureTest.hpp> 32 static EnvSignal &instance() {
33 static EnvSignal env_signal;
42 hupCallback(*this, &EnvSignal::hupHandler),
43 segvCallback(*this, &EnvSignal::segvHandler),
44 illCallback(*this, &EnvSignal::illHandler),
45 busCallback(*this, &EnvSignal::busHandler),
46 termCallback(*this, &EnvSignal::termHandler)
65 inline sigjmp_buf *getSigJmpBuf() {
76 void disableSigLongJmp() {
87 const std::string &message()
const {
95 bool getHUPReceived() {
103 void activateSignals();
109 void deactivateSignals();
112 void doSignal(
const char *message,
int signal);
121 sigjmp_buf m_sigJmpBuf;
124 std::string m_message;
126 Callback<EnvSignal> hupCallback;
127 Callback<EnvSignal> segvCallback;
128 Callback<EnvSignal> illCallback;
129 Callback<EnvSignal> busCallback;
130 Callback<EnvSignal> termCallback;
137 EnvSignal::activateSignals()
144 #if defined(SIERRA_USER_SHUTDOWN_SIGNAL) 147 #if defined(SIERRA_SHUTDOWN_SIGNAL) 150 #if defined(SIERRA_MPI_ABORT_SIGNAL) 157 EnvSignal::deactivateSignals()
164 #if defined(SIERRA_USER_SHUTDOWN_SIGNAL) 167 #if defined(SIERRA_SHUTDOWN_SIGNAL) 170 #if defined(SIERRA_MPI_ABORT_SIGNAL) 178 const char * message,
189 ::siglongjmp(m_sigJmpBuf, signal);
195 EnvSignal::hupHandler()
197 m_hupReceived =
true;
202 EnvSignal::intHandler()
204 m_hupReceived =
true;
209 EnvSignal::segvHandler()
212 doSignal(
"Segmentation violation error", SIGSEGV);
216 EnvSignal::busHandler()
219 doSignal(
"Bus error", SIGBUS);
224 EnvSignal::illHandler()
227 doSignal(
"Illegal instruction error", SIGILL);
232 EnvSignal::termHandler()
235 doSignal(
"Terminate signal received, likely due to an abort on another processor\n" 236 "Refer to standard output log for more information", SIGTERM);
245 EnvSignal::instance().activateSignals();
252 EnvSignal::instance().deactivateSignals();
259 return EnvSignal::instance().getSigJmpBuf();
266 return EnvSignal::instance().disableSigLongJmp();
273 return EnvSignal::instance().message();
280 return EnvSignal::instance().getHUPReceived();
sigjmp_buf * get_sigjmpbuf()
Function get_sigjmpbuf enables signal handling and returns a pointer to the jump buffer for ::sigsetj...
void remove_handler(int signal, CallbackBase &callback)
Member function remove_handler ...
static SignalHandler & instance()
Member function instance ...
bool HUP_received()
Function request_shutdown sets the shutdown requested flag so that future calls to shutdown_requested...
const std::string & get_signal_message()
Function disable_siglongjmp disables the long jump buffer. When signals are received, they return to the caller without long jumping to the set jump point.
void add_handler(int signal, CallbackBase &callback)
Member function add_handler ...
void deactivate_signals()
Function deactivate_signals disables the signal handlers.
void activate_signals()
Function activate_signals enables the signal handlers.