diff options
Diffstat (limited to 'source/sys_unix.c')
-rw-r--r-- | source/sys_unix.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/source/sys_unix.c b/source/sys_unix.c index 9f71eab..0798c96 100644 --- a/source/sys_unix.c +++ b/source/sys_unix.c @@ -58,6 +58,7 @@ cvar_t *sys_basedir; cvar_t *sys_libdir; cvar_t *sys_homedir; cvar_t *sys_stdio; +cvar_t *sys_parachute; static qboolean tty_enabled; static struct termios tty_orig; @@ -656,10 +657,6 @@ void Sys_Init( void ) { signal( SIGTERM, Sys_Term ); signal( SIGINT, Sys_Term ); - signal( SIGSEGV, Sys_Kill ); - signal( SIGILL, Sys_Kill ); - signal( SIGFPE, Sys_Kill ); - signal( SIGTRAP, Sys_Kill ); signal( SIGTTIN, SIG_IGN ); signal( SIGTTOU, SIG_IGN ); @@ -683,8 +680,9 @@ void Sys_Init( void ) { sys_libdir = Cvar_Get( "libdir", LIBDIR, CVAR_NOSET ); sys_stdio = Cvar_Get( "sys_stdio", "2", CVAR_NOSET ); + sys_parachute = Cvar_Get( "sys_parachute", "1", CVAR_NOSET ); - if( sys_stdio->integer ) { + if( sys_stdio->integer > 0 ) { // change stdin to non-blocking and stdout to blocking fcntl( 0, F_SETFL, fcntl( 0, F_GETFL, 0 ) | FNDELAY ); fcntl( 1, F_SETFL, fcntl( 1, F_GETFL, 0 ) & ~FNDELAY ); @@ -703,6 +701,14 @@ void Sys_Init( void ) { signal( SIGHUP, SIG_IGN ); } + if( sys_parachute->integer ) { + // perform some cleanup when crashing + signal( SIGSEGV, Sys_Kill ); + signal( SIGILL, Sys_Kill ); + signal( SIGFPE, Sys_Kill ); + signal( SIGTRAP, Sys_Kill ); + } + Sys_FixFPCW(); } |