aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder_thread.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-11-03 19:21:55 +0100
committerMax Kellermann <max@duempel.org>2009-11-03 19:21:55 +0100
commit734676fcfb73061917f0db726f5e3e897b2dd8c6 (patch)
treecc11f39dc7fbfd0ef3368ebbcd49ec0d7d2654c0 /src/decoder_thread.c
parentacb265d082fad45d6c298098a255bcb7daa4e954 (diff)
downloadmpd-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 'src/decoder_thread.c')
-rw-r--r--src/decoder_thread.c8
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);