1 #include "../general_protection_fault.h"
3 #include "../../except.h"
5 #include "../../thread_info.h"
11 struct floating_point_exception : virtual caspar_exception {};
12 struct segmentation_fault_exception : virtual caspar_exception {};
14 void catch_fpe(int signum)
18 CASPAR_THROW_EXCEPTION(floating_point_exception());
22 CASPAR_LOG_CURRENT_EXCEPTION();
27 void catch_segv(int signum)
31 CASPAR_THROW_EXCEPTION(segmentation_fault_exception());
35 CASPAR_LOG_CURRENT_EXCEPTION();
40 void do_install_handlers()
42 signal(SIGFPE, catch_fpe);
43 signal(SIGSEGV, catch_segv);
46 void install_gpf_handler()
48 ensure_gpf_handler_installed_for_thread();
51 void ensure_gpf_handler_installed_for_thread(
52 const char* thread_description)
54 static auto install = []() { do_install_handlers(); return 0; } ();
56 if (thread_description)
57 get_thread_info().name = thread_description;