Busy wait loops are a bad thing, especially when the response time can
be very long - busy waits eat a lot of CPU, and thus slow down the
other thread.  Since the other thread will notify us when it's ready,
we can use notify_wait() instead.
---

 src/decode.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/decode.c b/src/decode.c
index 02f8064..551f40c 100644
--- a/src/decode.c
+++ b/src/decode.c
@@ -58,8 +58,10 @@ static void player_wakeup_decoder(void)
 
 static void dc_command_wait(void)
 {
-       while (dc.command != DECODE_COMMAND_NONE)
+       while (dc.command != DECODE_COMMAND_NONE) {
                player_wakeup_decoder_nb();
+               notify_wait(&pc.notify);
+       }
 }
 
 static void dc_command(enum decoder_command cmd)
@@ -112,8 +114,10 @@ static unsigned calculateCrossFadeChunks(AudioFormat * af, 
float totalTime)
 
 static int waitOnDecode(int *decodeWaitedOn)
 {
-       while (dc.command == DECODE_COMMAND_START)
-               player_wakeup_decoder();
+       while (dc.command == DECODE_COMMAND_START) {
+               notify_signal(&dc.notify);
+               notify_wait(&pc.notify);
+       }
 
        if (dc.error != DECODE_ERROR_NOERROR) {
                pc.errored_song = dc.next_song;


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Musicpd-dev-team mailing list
Musicpd-dev-team@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team

Reply via email to