aboutsummaryrefslogtreecommitdiffstats
path: root/src/decode.c
diff options
context:
space:
mode:
authorWarren Dukes <warren.dukes@gmail.com>2004-04-11 18:27:12 +0000
committerWarren Dukes <warren.dukes@gmail.com>2004-04-11 18:27:12 +0000
commitabc075c4319ebda03ddcc2bfb4ff5d54596eb92d (patch)
treea4f5438e7b8bbfd11f9e980304e1c750ffa81f8e /src/decode.c
parentc1ab52dcb9be8995ea7154d91f21a7a16d463033 (diff)
downloadmpd-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/decode.c')
-rw-r--r--src/decode.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/decode.c b/src/decode.c
index ae5e2fcb4..b5f7da213 100644
--- a/src/decode.c
+++ b/src/decode.c
@@ -25,6 +25,7 @@
#include "audio.h"
#include "path.h"
#include "log.h"
+#include "sig_handlers.h"
#ifdef HAVE_MAD
#include "mp3_decode.h"
@@ -216,10 +217,13 @@ int decoderInit(PlayerControl * pc, Buffer * cb, AudioFormat *af,
int pid;
int ret;
decode_pid = &(pc->decode_pid);
+
+ blockSignals();
pid = fork();
if(pid==0) {
/* CHILD */
+ unblockSignals();
while(1) {
if(dc->start) {
@@ -279,12 +283,15 @@ int decoderInit(PlayerControl * pc, Buffer * cb, AudioFormat *af,
/* END OF CHILD */
}
else if(pid<0) {
+ unblockSignals();
strncpy(pc->erroredFile,pc->file,MAXPATHLEN);
pc->erroredFile[MAXPATHLEN] = '\0';
pc->error = PLAYER_ERROR_SYSTEM;
return -1;
}
- else *decode_pid = pid;
+
+ *decode_pid = pid;
+ unblockSignals();
return 0;
}