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) ...@@ -58,8 +58,10 @@ static void player_wakeup_decoder(void)
static void dc_command_wait(void) static void dc_command_wait(void)
{ {
while (dc.command != DECODE_COMMAND_NONE) while (dc.command != DECODE_COMMAND_NONE) {
player_wakeup_decoder_nb(); player_wakeup_decoder_nb();
notify_wait(&pc.notify);
}
} }
static void dc_command(enum decoder_command cmd) static void dc_command(enum decoder_command cmd)
...@@ -112,8 +114,10 @@ static unsigned calculateCrossFadeChunks(AudioFormat * af, float totalTime) ...@@ -112,8 +114,10 @@ static unsigned calculateCrossFadeChunks(AudioFormat * af, float totalTime)
static int waitOnDecode(int *decodeWaitedOn) static int waitOnDecode(int *decodeWaitedOn)
{ {
while (dc.command == DECODE_COMMAND_START) while (dc.command == DECODE_COMMAND_START) {
player_wakeup_decoder(); notify_signal(&dc.notify);
notify_wait(&pc.notify);
}
if (dc.error != DECODE_ERROR_NOERROR) { if (dc.error != DECODE_ERROR_NOERROR) {
pc.errored_song = dc.next_song; 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