From 64a481d8732cc45b01b70d18cf95e1374b7dcba7 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
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