when doing signal functions (like sigaction) make sure it wasn't interrupted by a signal (errno==EINTR)

git-svn-id: https://svn.musicpd.org/mpd/trunk@729 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Warren Dukes
2004-04-13 16:46:11 +00:00
parent 00c25b772e
commit acf0e147c2
6 changed files with 31 additions and 14 deletions

View File

@@ -46,13 +46,15 @@
#include <fcntl.h>
volatile int player_pid = 0;
volatile int player_termSent = 0;
void clearPlayerPid() {
player_pid = 0;
}
void resetPlayer() {
int pid;
player_pid = 0;
player_termSent = 0;
clearPlayerPid();
getPlayerData()->playerControl.stop = 0;
getPlayerData()->playerControl.play = 0;
getPlayerData()->playerControl.pause = 0;
@@ -97,6 +99,8 @@ int playerInit() {
PlayerControl * pc = &(getPlayerData()->playerControl);
struct sigaction sa;
clearUpdatePid();
unblockSignals();
sa.sa_flags = 0;
@@ -104,11 +108,11 @@ int playerInit() {
finishSigHandlers();
sa.sa_handler = decodeSigHandler;
sigaction(SIGCHLD,&sa,NULL);
sigaction(SIGTERM,&sa,NULL);
sigaction(SIGINT,&sa,NULL);
while(sigaction(SIGCHLD,&sa,NULL)<0 && errno==EINTR);
while(sigaction(SIGTERM,&sa,NULL)<0 && errno==EINTR);
while(sigaction(SIGINT,&sa,NULL)<0 && errno==EINTR);
close(listenSocket);
while(close(listenSocket)<0 && errno==EINTR);
freeAllInterfaces();
closeMp3Directory();
finishPlaylist();