/* ================ sig_handler ================ */ static void sig_handler( int signum, siginfo_t* info, void* context ) { static bool double_fault = false; if( double_fault ) { Sys_Printf( "double fault %s, bailing out\n", strsignal( signum ) ); Posix_Exit( signum ); } double_fault = true; // NOTE: see sigaction man page, could verbose the whole siginfo_t and print human readable si_code Sys_Printf( "signal caught: %s\nsi_code %d\n", strsignal( signum ), info->si_code ); if( fatalError[ 0 ] ) { Sys_Printf( "Was in fatal error shutdown: %s\n", fatalError ); } Sys_Printf( "Trying to exit gracefully..\n" ); Posix_SetExit( signum ); common->Quit(); }
/* ================ Sys_Error ================ */ void Sys_Error(const char *error, ...) { va_list argptr; Sys_Printf( "Sys_Error: " ); va_start( argptr, error ); Sys_DebugVPrintf( error, argptr ); va_end( argptr ); Sys_Printf( "\n" ); Posix_Exit( EXIT_FAILURE ); }
/* ================ Sys_Quit ================ */ void Sys_Quit() { Posix_Exit( EXIT_SUCCESS ); }