mirror of
https://github.com/dhewm/dhewm3.git
synced 2025-01-31 13:40:38 +00:00
Get rid of the signal handler
SDL covers this via e.g. SDL_QUIT event on ctrl+c.
This commit is contained in:
parent
d2b7eac843
commit
0bc457063f
4 changed files with 0 additions and 149 deletions
|
@ -663,7 +663,6 @@ if (APPLE)
|
|||
sys/events.cpp
|
||||
sys/sys_local.cpp
|
||||
sys/posix/posix_net.cpp
|
||||
sys/posix/posix_signal.cpp
|
||||
sys/posix/posix_main.cpp
|
||||
)
|
||||
|
||||
|
@ -700,7 +699,6 @@ else()
|
|||
sys/events.cpp
|
||||
sys/sys_local.cpp
|
||||
sys/posix/posix_net.cpp
|
||||
sys/posix/posix_signal.cpp
|
||||
sys/posix/posix_main.cpp
|
||||
sys/linux/main.cpp
|
||||
)
|
||||
|
|
|
@ -87,8 +87,6 @@ void Posix_Exit(int ret) {
|
|||
Sys_Printf( "tcsetattr failed: %s\n", strerror( errno ) );
|
||||
}
|
||||
}
|
||||
// at this point, too late to catch signals
|
||||
Posix_ClearSigs();
|
||||
|
||||
// process spawning. it's best when it happens after everything has shut down
|
||||
if ( exit_spawn[0] ) {
|
||||
|
@ -360,7 +358,6 @@ Posix_EarlyInit
|
|||
*/
|
||||
void Posix_EarlyInit( void ) {
|
||||
exit_spawn[0] = '\0';
|
||||
Posix_InitSigs();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -40,9 +40,6 @@ void Posix_EarlyInit( );
|
|||
// called after common has been initialized
|
||||
void Posix_LateInit( );
|
||||
|
||||
void Posix_InitSigs( );
|
||||
void Posix_ClearSigs( );
|
||||
|
||||
void Posix_Exit( int ret );
|
||||
void Posix_SetExit(int ret); // override the exit code
|
||||
void Posix_SetExitSpawn( const char *exeName ); // set the process to be spawned when we quit
|
||||
|
|
|
@ -1,141 +0,0 @@
|
|||
/*
|
||||
===========================================================================
|
||||
|
||||
Doom 3 GPL Source Code
|
||||
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
|
||||
|
||||
This file is part of the Doom 3 GPL Source Code ("Doom 3 Source Code").
|
||||
|
||||
Doom 3 Source Code is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Doom 3 Source Code is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
|
||||
|
||||
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
|
||||
|
||||
===========================================================================
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "sys/platform.h"
|
||||
#include "framework/Common.h"
|
||||
|
||||
#include "sys/posix/posix_public.h"
|
||||
|
||||
const int siglist[] = {
|
||||
SIGHUP,
|
||||
SIGQUIT,
|
||||
SIGILL,
|
||||
SIGTRAP,
|
||||
SIGIOT,
|
||||
SIGBUS,
|
||||
SIGSEGV,
|
||||
SIGPIPE,
|
||||
SIGABRT,
|
||||
// SIGTTIN,
|
||||
// SIGTTOU,
|
||||
-1
|
||||
};
|
||||
|
||||
const char *signames[] = {
|
||||
"SIGHUP",
|
||||
"SIGQUIT",
|
||||
"SIGILL",
|
||||
"SIGTRAP",
|
||||
"SIGIOT",
|
||||
"SIGBUS",
|
||||
"SIGSEGV",
|
||||
"SIGPIPE",
|
||||
"SIGABRT",
|
||||
// "SIGTTIN",
|
||||
// "SIGTTOUT"
|
||||
};
|
||||
|
||||
/*
|
||||
================
|
||||
Posix_ClearSigs
|
||||
================
|
||||
*/
|
||||
void Posix_ClearSigs( ) {
|
||||
struct sigaction action;
|
||||
int i;
|
||||
|
||||
/* Set up the structure */
|
||||
action.sa_handler = SIG_DFL;
|
||||
sigemptyset( &action.sa_mask );
|
||||
action.sa_flags = 0;
|
||||
|
||||
i = 0;
|
||||
while ( siglist[ i ] != -1 ) {
|
||||
if ( sigaction( siglist[ i ], &action, NULL ) != 0 ) {
|
||||
Sys_Printf( "Failed to reset %s handler: %s\n", signames[ i ], strerror( errno ) );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
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 ) );
|
||||
_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 );
|
||||
|
||||
Sys_Printf( "Trying to exit gracefully..\n" );
|
||||
|
||||
Posix_SetExit( signum );
|
||||
|
||||
common->Quit();
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
Posix_InitSigs
|
||||
================
|
||||
*/
|
||||
void Posix_InitSigs( ) {
|
||||
struct sigaction action;
|
||||
int i;
|
||||
|
||||
/* Set up the structure */
|
||||
action.sa_sigaction = sig_handler;
|
||||
sigemptyset( &action.sa_mask );
|
||||
action.sa_flags = SA_SIGINFO | SA_NODEFER;
|
||||
|
||||
i = 0;
|
||||
while ( siglist[ i ] != -1 ) {
|
||||
if ( sigaction( siglist[ i ], &action, NULL ) != 0 ) {
|
||||
Sys_Printf( "Failed to set %s handler: %s\n", signames[ i ], strerror( errno ) );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
// if the process is backgrounded (running non interactively)
|
||||
// then SIGTTIN or SIGTOU could be emitted, if not caught, turns into a SIGSTP
|
||||
signal( SIGTTIN, SIG_IGN );
|
||||
signal( SIGTTOU, SIG_IGN );
|
||||
}
|
Loading…
Reference in a new issue