diff options
Diffstat (limited to '')
-rw-r--r-- | src/player.c | 10 | ||||
-rw-r--r-- | src/sig_handlers.c | 16 | ||||
-rw-r--r-- | src/sig_handlers.h | 2 |
3 files changed, 19 insertions, 9 deletions
diff --git a/src/player.c b/src/player.c index f38b9384c..cb9b5ed1c 100644 --- a/src/player.c +++ b/src/player.c @@ -105,20 +105,12 @@ int playerInit() { player_pid = fork(); if(player_pid==0) { PlayerControl * pc = &(getPlayerData()->playerControl); - struct sigaction sa; clearUpdatePid(); unblockSignals(); - sa.sa_flags = 0; - sigemptyset(&sa.sa_mask); - - finishSigHandlers(); - sa.sa_handler = decodeSigHandler; - while(sigaction(SIGCHLD,&sa,NULL)<0 && errno==EINTR); - while(sigaction(SIGTERM,&sa,NULL)<0 && errno==EINTR); - while(sigaction(SIGINT,&sa,NULL)<0 && errno==EINTR); + setSigHandlersForDecoder(); while(close(listenSocket)<0 && errno==EINTR); freeAllInterfaces(); diff --git a/src/sig_handlers.c b/src/sig_handlers.c index a3ac478cb..4ab5163bf 100644 --- a/src/sig_handlers.c +++ b/src/sig_handlers.c @@ -25,6 +25,7 @@ #include "signal_check.h" #include "log.h" #include "player.h" +#include "decode.h" #include <signal.h> #include <sys/types.h> @@ -89,6 +90,21 @@ void finishSigHandlers() { signal_unhandle(SIGHUP); } +void setSigHandlersForDecoder() { + struct sigaction sa; + + finishSigHandlers(); + + sa.sa_flags = 0; + sigemptyset(&sa.sa_mask); + sa.sa_handler = SIG_IGN; + while(sigaction(SIGHUP,&sa,NULL)<0 && errno==EINTR); + sa.sa_handler = decodeSigHandler; + while(sigaction(SIGCHLD,&sa,NULL)<0 && errno==EINTR); + while(sigaction(SIGTERM,&sa,NULL)<0 && errno==EINTR); + while(sigaction(SIGINT,&sa,NULL)<0 && errno==EINTR); +} + void ignoreSignals() { struct sigaction sa; diff --git a/src/sig_handlers.h b/src/sig_handlers.h index 70f2fc4ad..e1293060b 100644 --- a/src/sig_handlers.h +++ b/src/sig_handlers.h @@ -27,6 +27,8 @@ void initSigHandlers(); void finishSigHandlers(); +void setSigHandlersForDecoder(); + void ignoreSignals(); void blockSignals(); |