From 64a481d8732cc45b01b70d18cf95e1374b7dcba7 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 2 Nov 2009 17:12:00 +0100 Subject: {decoder,player}_control: removed duplicate wakeups Don't wake up the target thread in every iteration of the wait() loop. Waking it up once, right after the command has been set, must be enough. --- src/decoder_control.c | 5 ++--- src/output_control.c | 2 +- src/player_control.c | 5 ++--- 3 files changed, 5 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/decoder_control.c b/src/decoder_control.c index 10f576c5c..9844b6918 100644 --- a/src/decoder_control.c +++ b/src/decoder_control.c @@ -44,10 +44,8 @@ dc_deinit(struct decoder_control *dc) static void dc_command_wait_locked(struct decoder_control *dc) { - while (dc->command != DECODE_COMMAND_NONE) { - decoder_signal(dc); + while (dc->command != DECODE_COMMAND_NONE) player_wait_decoder(dc); - } } void @@ -62,6 +60,7 @@ static void dc_command_locked(struct decoder_control *dc, enum decoder_command cmd) { dc->command = cmd; + decoder_signal(dc); dc_command_wait_locked(dc); } diff --git a/src/output_control.c b/src/output_control.c index 973baa463..c54ce4f92 100644 --- a/src/output_control.c +++ b/src/output_control.c @@ -40,7 +40,6 @@ struct notify audio_output_client_notify; static void ao_command_wait(struct audio_output *ao) { while (ao->command != AO_COMMAND_NONE) { - g_cond_signal(ao->cond); g_mutex_unlock(ao->mutex); notify_wait(&audio_output_client_notify); g_mutex_lock(ao->mutex); @@ -51,6 +50,7 @@ static void ao_command(struct audio_output *ao, enum audio_output_command cmd) { assert(ao->command == AO_COMMAND_NONE); ao->command = cmd; + g_cond_signal(ao->cond); ao_command_wait(ao); } diff --git a/src/player_control.c b/src/player_control.c index 42dc9e1c0..1828a1ca0 100644 --- a/src/player_control.c +++ b/src/player_control.c @@ -72,10 +72,8 @@ pc_song_deleted(const struct song *song) static void player_command_wait_locked(void) { - while (pc.command != PLAYER_COMMAND_NONE) { - player_signal(); + while (pc.command != PLAYER_COMMAND_NONE) g_cond_wait(main_cond, pc.mutex); - } } static void @@ -84,6 +82,7 @@ player_command_locked(enum player_command cmd) assert(pc.command == PLAYER_COMMAND_NONE); pc.command = cmd; + player_signal(); player_command_wait_locked(); } -- cgit v1.2.3