diff --git a/Common/Core/vtkLogger.cxx b/Common/Core/vtkLogger.cxx index 5e15876d78cae723bf65ec568ded7132c4a89f63..81559b8d230a4ddf861dd632245ef946cb39e003 100644 --- a/Common/Core/vtkLogger.cxx +++ b/Common/Core/vtkLogger.cxx @@ -106,6 +106,13 @@ VTK_ABI_NAMESPACE_END VTK_ABI_NAMESPACE_BEGIN //============================================================================= bool vtkLogger::EnableUnsafeSignalHandler = true; +bool vtkLogger::EnableSigabrtHandler = false; +bool vtkLogger::EnableSigbusHandler = false; +bool vtkLogger::EnableSigfpeHandler = false; +bool vtkLogger::EnableSigillHandler = false; +bool vtkLogger::EnableSigintHandler = false; +bool vtkLogger::EnableSigsegvHandler = false; +bool vtkLogger::EnableSigtermHandler = false; vtkLogger::Verbosity vtkLogger::InternalVerbosityLevel = vtkLogger::VERBOSITY_1; //------------------------------------------------------------------------------ @@ -138,6 +145,13 @@ void vtkLogger::Init(int& argc, char* argv[], const char* verbosity_flag /*= "-v loguru::Options options; options.verbosity_flag = verbosity_flag; options.signal_options.unsafe_signal_handler = vtkLogger::EnableUnsafeSignalHandler; + options.signal_options.sigabrt = vtkLogger::EnableSigabrtHandler; + options.signal_options.sigbus = vtkLogger::EnableSigbusHandler; + options.signal_options.sigfpe = vtkLogger::EnableSigfpeHandler; + options.signal_options.sigill = vtkLogger::EnableSigillHandler; + options.signal_options.sigint = vtkLogger::EnableSigintHandler; + options.signal_options.sigsegv = vtkLogger::EnableSigsegvHandler; + options.signal_options.sigterm = vtkLogger::EnableSigtermHandler; if (strlen(detail::ThreadName) > 0) { options.main_thread_name = detail::ThreadName; diff --git a/Common/Core/vtkLogger.h b/Common/Core/vtkLogger.h index e7b38dd9f4231e1857cfd301d79cbc39b3ec7d0d..d42b90e87e9b4a0e8efc44eb5fa8b28ec37c8284 100644 --- a/Common/Core/vtkLogger.h +++ b/Common/Core/vtkLogger.h @@ -37,7 +37,24 @@ * that, use `vtkLogger::SetThreadName`. Calling `vtkLogger::Init` will set the name * for the main thread. * - * To prevent the logging framework from intercepting signals from your application, + * You can choose to turn on signal handlers for intercepting signals. By default, + * all signal handlers are disabled. The following is a list of signal handlers + * and the corresponding static variable that can be used to enable/disable each + * signal handler. + * + * - SIGABRT - `vtkLogger::EnableSigabrtHandler` + * - SIGBUS - `vtkLogger::EnableSigbusHandler` + * - SIGFPE - `vtkLogger::EnableSigfpeHandler` + * - SIGILL - `vtkLogger::EnableSigillHandler` + * - SIGINT - `vtkLogger::EnableSigintHandler` + * - SIGSEGV - `vtkLogger::EnableSigsegvHandler` + * - SIGTERM - `vtkLogger::EnableSigtermHandler` + * + * To enable any of these signal handlers, set their value to `true` prior to calling + * `vtkLogger::Init(argc, argv)` or `vtkLogger::Init()`. + * + * When signal handlers are enabled, + * to prevent the logging framework from intercepting signals from your application, * you can set the static variable `vtkLogger::EnableUnsafeSignalHandler` to `false` * prior to calling `vtkLogger::Init(argc, argv)` or `vtkLogger::Init()`. * @@ -420,6 +437,13 @@ public: * certain circumstances. */ static bool EnableUnsafeSignalHandler; + static bool EnableSigabrtHandler; + static bool EnableSigbusHandler; + static bool EnableSigfpeHandler; + static bool EnableSigillHandler; + static bool EnableSigintHandler; + static bool EnableSigsegvHandler; + static bool EnableSigtermHandler; protected: vtkLogger();