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:
parent
8d3942e0c3
commit
726c6e86d3
10
src/decode.c
10
src/decode.c
@ -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)
|
|||||||
|
|
||||||
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;
|
||||||
|
Loading…
Reference in New Issue
Block a user