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/decode.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/decode.c')
-rw-r--r-- | src/decode.c | 9 |
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; } |