Commit 726c6e86 authored by Max Kellermann's avatar Max Kellermann

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.
parent 8d3942e0
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment