aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-11-02 17:12:00 +0100
committerMax Kellermann <max@duempel.org>2009-11-02 17:12:00 +0100
commit64a481d8732cc45b01b70d18cf95e1374b7dcba7 (patch)
tree5be1cb521897d47d2cdbcfbb7ae068b154ab2d5a
parent93d8f9f00e838b4b0054ea6487d8810bfa60628d (diff)
downloadmpd-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.c5
-rw-r--r--src/output_control.c2
-rw-r--r--src/player_control.c5
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();
}