clean up signal handling using a polling method, from the genius that is mackstann

git-svn-id: https://svn.musicpd.org/mpd/trunk@697 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Warren Dukes
2004-04-11 23:07:43 +00:00
parent 063affb047
commit ae33b348af
11 changed files with 108 additions and 87 deletions

View File

@@ -69,9 +69,11 @@ void resetPlayer() {
void player_sigChldHandler(int pid, int status) {
if(player_pid==pid) {
if(WIFSIGNALED(status) && WTERMSIG(status)!=SIGTERM) {
ERROR("player process died from a "
"non-TERM signal: %i\n",
DEBUG("SIGCHLD caused by player process\n");
if(WIFSIGNALED(status) && WTERMSIG(status)!=SIGTERM &&
WTERMSIG(status)!=SIGINT)
{
ERROR("player process died from signal: %i\n",
WTERMSIG(status));
}
resetPlayer();
@@ -100,12 +102,11 @@ int playerInit() {
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
sa.sa_handler = SIG_IGN;
sigaction(SIGPIPE,&sa,NULL);
sigaction(SIGHUP,&sa,NULL);
finishSigHandlers();
sa.sa_handler = decodeSigHandler;
sigaction(SIGCHLD,&sa,NULL);
sigaction(SIGTERM,&sa,NULL);
sigaction(SIGINT,&sa,NULL);
close(listenSocket);
freeAllInterfaces();