diff options
author | Max Kellermann <max@duempel.org> | 2008-04-15 05:57:22 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2008-04-15 05:57:22 +0000 |
commit | 7c952c4f4bb4272cd4082f85960eb65976286aa4 (patch) | |
tree | 0670febd814893b67812084f04fb332f75e01757 /src/decode.c | |
parent | 071c8f4ac760eca2e47a33764dcbe4bf004e87f3 (diff) | |
download | mpd-7c952c4f4bb4272cd4082f85960eb65976286aa4.tar.gz mpd-7c952c4f4bb4272cd4082f85960eb65976286aa4.tar.xz mpd-7c952c4f4bb4272cd4082f85960eb65976286aa4.zip |
added ob_set_lazy()
In lazy mode (previously the default), outputBuffer.c only wakes up
the player when it was previously empty. That caused a deadlock when
the player was waiting for buffered_before_play, since the decoder
wouldn't wake up the player when buffered_before_play was reached. In
non-lazy mode, always wake up the player when a new chunk was decoded.
git-svn-id: https://svn.musicpd.org/mpd/trunk@7364 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to '')
-rw-r--r-- | src/decode.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/decode.c b/src/decode.c index c188cd286..297f6110d 100644 --- a/src/decode.c +++ b/src/decode.c @@ -400,6 +400,8 @@ static void decodeParent(void) /** the position of the first chunk in the next song */ int next = -1; + ob_set_lazy(0); + if (waitOnDecode(&decodeWaitedOn) < 0) return; @@ -421,9 +423,11 @@ static void decodeParent(void) /* not enough decoded buffer space yet */ player_sleep(); continue; - } else + } else { /* buffering is complete */ buffering = 0; + ob_set_lazy(1); + } } if (decodeWaitedOn) { @@ -513,6 +517,7 @@ static void decodeParent(void) } nextChunk = ob_absolute(crossFadeChunks); if (nextChunk >= 0) { + ob_set_lazy(1); crossFade(beginChunk, ob_get_chunk(nextChunk), &(ob.audioFormat), @@ -529,6 +534,7 @@ static void decodeParent(void) } else { /* wait for the decoder */ + ob_set_lazy(0); player_sleep(); continue; } |