diff options
author | Warren Dukes <warren.dukes@gmail.com> | 2004-04-11 18:27:12 +0000 |
---|---|---|
committer | Warren Dukes <warren.dukes@gmail.com> | 2004-04-11 18:27:12 +0000 |
commit | abc075c4319ebda03ddcc2bfb4ff5d54596eb92d (patch) | |
tree | a4f5438e7b8bbfd11f9e980304e1c750ffa81f8e /src/player.c | |
parent | c1ab52dcb9be8995ea7154d91f21a7a16d463033 (diff) | |
download | mpd-abc075c4319ebda03ddcc2bfb4ff5d54596eb92d.tar.gz mpd-abc075c4319ebda03ddcc2bfb4ff5d54596eb92d.tar.xz mpd-abc075c4319ebda03ddcc2bfb4ff5d54596eb92d.zip |
ok, fix some bug due to a child process dieing before the parent can
even assign pid, thus we need to block CHLD signal around fork();
git-svn-id: https://svn.musicpd.org/mpd/trunk@694 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'src/player.c')
-rw-r--r-- | src/player.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/player.c b/src/player.c index 0659b212c..3bd6508ac 100644 --- a/src/player.c +++ b/src/player.c @@ -31,6 +31,7 @@ #include "volume.h" #include "playerData.h" #include "permission.h" +#include "sig_handlers.h" #include <stdio.h> #include <sys/types.h> @@ -88,11 +89,14 @@ void player_sigChldHandler(int pid, int status) { } int playerInit() { + blockSignals(); player_pid = fork(); - if(player_pid==0) { PlayerControl * pc = &(getPlayerData()->playerControl); struct sigaction sa; + + unblockSignals(); + sa.sa_flags = 0; sigemptyset(&sa.sa_mask); @@ -136,11 +140,13 @@ int playerInit() { exit(EXIT_SUCCESS); } else if(player_pid<0) { + unblockSignals(); ERROR("player Problems fork()'ing\n"); player_pid = 0; return -1; } + unblockSignals(); return 0; } |