send notify signal after SIGCONT

When the decoder receives SIGCONT during waitNotify(), the kernel
restarts the read() system call.  This lets the decoder process block
indefinitely, while the player process waits for it to react.  This
should probably be solved with a proper signal handler which aborts
the read() system call, but for now, we just write to the pipe to make
it wake up.

git-svn-id: https://svn.musicpd.org/mpd/trunk@7216 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Max Kellermann 2008-03-26 10:38:58 +00:00 committed by Eric Wong
parent bf05ce161f
commit 70dbc2b0e7
1 changed files with 2 additions and 0 deletions

View File

@ -65,6 +65,7 @@ static void stopDecode(DecoderControl * dc)
if (decode_pid > 0 && (dc->start || dc->state != DECODE_STATE_STOP)) {
dc->stop = 1;
kill(decode_pid, SIGCONT);
signalNotify(&(getPlayerData()->buffer.notify));
while (decode_pid > 0 && dc->stop)
my_usleep(10000);
}
@ -202,6 +203,7 @@ static int decodeSeek(PlayerControl * pc, DecoderControl * dc,
dc->seekError = 0;
dc->seek = 1;
kill(decode_pid, SIGCONT);
signalNotify(&(getPlayerData()->buffer.notify));
while (decode_pid > 0 && dc->seek)
my_usleep(10000);
if (!dc->seekError) {