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.
Diffstat (limited to '')
-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();
}