diff --git a/engine/common/host.c b/engine/common/host.c index adf364ff..6148582d 100644 --- a/engine/common/host.c +++ b/engine/common/host.c @@ -1072,6 +1072,9 @@ static void Host_InitCommon( int argc, char **argv, const char *progname, qboole Host_RunTests( 0 ); #endif +#if XASH_DEDICATED + Platform_SetupSigtermHandling(); +#endif Platform_Init( Host_IsDedicated( ) || developer >= DEV_EXTENDED ); FS_Init( basedir ); diff --git a/engine/platform/platform.h b/engine/platform/platform.h index df53a23f..1605012d 100644 --- a/engine/platform/platform.h +++ b/engine/platform/platform.h @@ -51,6 +51,7 @@ void IOS_LaunchDialog( void ); #if XASH_POSIX void Posix_Daemonize( void ); +void Posix_SetupSigtermHandling( void ); #endif #if XASH_SDL @@ -156,6 +157,13 @@ static inline qboolean Sys_DebuggerPresent( void ) #endif } +static inline void Platform_SetupSigtermHandling( void ) +{ +#if XASH_POSIX + Posix_SetupSigtermHandling( ); +#endif +} + /* ============================================================================== diff --git a/engine/platform/posix/sys_posix.c b/engine/platform/posix/sys_posix.c index 11c58a0d..222a57fd 100644 --- a/engine/platform/posix/sys_posix.c +++ b/engine/platform/posix/sys_posix.c @@ -18,6 +18,7 @@ GNU General Public License for more details. #include #include #include +#include #include "platform/platform.h" #include "menu_int.h" @@ -145,6 +146,21 @@ void Posix_Daemonize( void ) } +static void Posix_SigtermCallback( int signal ) +{ + Sys_Quit(); +} + +void Posix_SetupSigtermHandling( void ) +{ +#if !XASH_PSVITA + struct sigaction act = { 0 }; + act.sa_handler = Posix_SigtermCallback; + act.sa_flags = 0; + sigaction( SIGTERM, &act, NULL ); +#endif +} + #if XASH_TIMER == TIMER_POSIX double Platform_DoubleTime( void ) {