#1) fix a few potential deadlock conditons in decode.c when crossfading is enabled
#2) fix a deadlock condition when attempting to seek if the decoder quit and returned to playerInit() git-svn-id: https://svn.musicpd.org/mpd/trunk@5325 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
11
src/decode.c
11
src/decode.c
@@ -481,10 +481,10 @@ static void advanceOutputBufferTo(OutputBuffer * cb, PlayerControl * pc,
|
||||
while (cb->begin != to) {
|
||||
handleMetadata(cb, pc, previous, currentChunkSent,
|
||||
currentChunk);
|
||||
cb->begin++;
|
||||
if (cb->begin >= buffered_chunks) {
|
||||
if (cb->begin + 1 >= buffered_chunks) {
|
||||
cb->begin = 0;
|
||||
}
|
||||
else cb->begin++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -517,7 +517,8 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer *
|
||||
pc->play = 0;
|
||||
kill(getppid(), SIGUSR1);
|
||||
|
||||
while (decode_pid > 0 && cb->end - cb->begin < bbp &&
|
||||
while (decode_pid > 0 &&
|
||||
cb->end - cb->begin < bbp &&
|
||||
cb->end != buffered_chunks - 1 &&
|
||||
dc->state != DECODE_STATE_STOP) {
|
||||
processDecodeInput();
|
||||
@@ -618,10 +619,10 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer *
|
||||
cb->begin = 0;
|
||||
} else
|
||||
cb->begin++;
|
||||
} else if (next == cb->begin) {
|
||||
} else if (cb->begin != end && cb->begin == next) {
|
||||
if (doCrossFade == 1 && nextChunk >= 0) {
|
||||
nextChunk = cb->begin + crossFadeChunks;
|
||||
test = cb->end;
|
||||
test = end;
|
||||
if (end < cb->begin)
|
||||
test += buffered_chunks;
|
||||
if (nextChunk < test) {
|
||||
|
||||
Reference in New Issue
Block a user