diff options
author | Max Kellermann <max@duempel.org> | 2009-11-03 19:21:55 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-11-03 19:21:55 +0100 |
commit | 734676fcfb73061917f0db726f5e3e897b2dd8c6 (patch) | |
tree | cc11f39dc7fbfd0ef3368ebbcd49ec0d7d2654c0 | |
parent | acb265d082fad45d6c298098a255bcb7daa4e954 (diff) | |
download | mpd-734676fcfb73061917f0db726f5e3e897b2dd8c6.tar.gz mpd-734676fcfb73061917f0db726f5e3e897b2dd8c6.tar.xz mpd-734676fcfb73061917f0db726f5e3e897b2dd8c6.zip |
decoder_thread: unlock the decoder while checking the stream
This is only a slight change to the previous locking behaviour: keep
the decoder unlocked during the loop, and lock it only while checking
decoder_control.command.
Diffstat (limited to '')
-rw-r--r-- | src/decoder_thread.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/decoder_thread.c b/src/decoder_thread.c index eca8d8599..d02e6985c 100644 --- a/src/decoder_thread.c +++ b/src/decoder_thread.c @@ -121,12 +121,11 @@ decoder_run_song(struct decoder_control *dc, return; } - decoder_lock(dc); - /* wait for the input stream to become ready; its metadata will be available then */ while (!input_stream.ready) { + decoder_lock(dc); if (dc->command == DECODE_COMMAND_STOP) { decoder_unlock(dc); input_stream_close(&input_stream); @@ -136,6 +135,7 @@ decoder_run_song(struct decoder_control *dc, } decoder_unlock(dc); + ret = input_stream_buffer(&input_stream); if (ret < 0) { input_stream_close(&input_stream); @@ -143,10 +143,10 @@ decoder_run_song(struct decoder_control *dc, dc->state = DECODE_STATE_ERROR; return; } - - decoder_lock(dc); } + decoder_lock(dc); + if (dc->command == DECODE_COMMAND_STOP) { decoder_unlock(dc); input_stream_close(&input_stream); |