diff options
author | Max Kellermann <max@duempel.org> | 2009-11-02 17:12:00 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-11-02 17:12:00 +0100 |
commit | 64a481d8732cc45b01b70d18cf95e1374b7dcba7 (patch) | |
tree | 5be1cb521897d47d2cdbcfbb7ae068b154ab2d5a | |
parent | 93d8f9f00e838b4b0054ea6487d8810bfa60628d (diff) | |
download | mpd-64a481d8732cc45b01b70d18cf95e1374b7dcba7.tar.gz mpd-64a481d8732cc45b01b70d18cf95e1374b7dcba7.tar.xz mpd-64a481d8732cc45b01b70d18cf95e1374b7dcba7.zip |
{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.
-rw-r--r-- | src/decoder_control.c | 5 | ||||
-rw-r--r-- | src/output_control.c | 2 | ||||
-rw-r--r-- | src/player_control.c | 5 |
3 files changed, 5 insertions, 7 deletions
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(); } |