diff options
author | Warren Dukes <warren.dukes@gmail.com> | 2004-04-11 23:07:43 +0000 |
---|---|---|
committer | Warren Dukes <warren.dukes@gmail.com> | 2004-04-11 23:07:43 +0000 |
commit | ae33b348afa800447db9344cf6e5d082f1a1fcb3 (patch) | |
tree | 6e0977b81c8f9413a5513d27bd3a53cccabcf950 /src/player.c | |
parent | 063affb04775fcf59e92df0bf70f0ecec0edf4ed (diff) | |
download | mpd-ae33b348afa800447db9344cf6e5d082f1a1fcb3.tar.gz mpd-ae33b348afa800447db9344cf6e5d082f1a1fcb3.tar.xz mpd-ae33b348afa800447db9344cf6e5d082f1a1fcb3.zip |
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
Diffstat (limited to '')
-rw-r--r-- | src/player.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/player.c b/src/player.c index 3bd6508ac..ecf7036f3 100644 --- a/src/player.c +++ b/src/player.c @@ -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(); |