don't busy wait for the decoder thread

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.
This commit is contained in:
Max Kellermann 2008-08-26 08:27:04 +02:00
parent 8d3942e0c3
commit 726c6e86d3

View File

@ -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;