aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/output_all.c22
-rw-r--r--src/output_control.c12
-rw-r--r--src/output_control.h10
3 files changed, 23 insertions, 21 deletions
diff --git a/src/output_all.c b/src/output_all.c
index 551736a41..4e0b2eb22 100644
--- a/src/output_all.c
+++ b/src/output_all.c
@@ -206,29 +206,13 @@ static void audio_output_wait_all(void)
}
/**
- * Signal the audio output if it is open, and set the "allow_play"
- * flag. This function locks the mutex.
- */
-static void
-audio_output_lock_signal(struct audio_output *ao)
-{
- g_mutex_lock(ao->mutex);
-
- ao->allow_play = true;
- if (audio_output_is_open(ao))
- g_cond_signal(ao->cond);
-
- g_mutex_unlock(ao->mutex);
-}
-
-/**
* Signals all audio outputs which are open.
*/
static void
-audio_output_signal_all(void)
+audio_output_allow_play_all(void)
{
for (unsigned i = 0; i < num_audio_outputs; ++i)
- audio_output_lock_signal(&audio_outputs[i]);
+ audio_output_allow_play(&audio_outputs[i]);
}
static void
@@ -533,7 +517,7 @@ audio_output_all_cancel(void)
/* the audio outputs are now waiting for a signal, to
synchronize the cleared music pipe */
- audio_output_signal_all();
+ audio_output_allow_play_all();
/* invalidate elapsed_time */
diff --git a/src/output_control.c b/src/output_control.c
index 14976dbfb..f8c5cd873 100644
--- a/src/output_control.c
+++ b/src/output_control.c
@@ -268,6 +268,18 @@ void audio_output_cancel(struct audio_output *ao)
}
void
+audio_output_allow_play(struct audio_output *ao)
+{
+ g_mutex_lock(ao->mutex);
+
+ ao->allow_play = true;
+ if (audio_output_is_open(ao))
+ g_cond_signal(ao->cond);
+
+ g_mutex_unlock(ao->mutex);
+}
+
+void
audio_output_release(struct audio_output *ao)
{
if (ao->always_on)
diff --git a/src/output_control.h b/src/output_control.h
index 2b88d4103..f0e317d6e 100644
--- a/src/output_control.h
+++ b/src/output_control.h
@@ -72,11 +72,17 @@ audio_output_drain_async(struct audio_output *ao);
/**
* Clear the "allow_play" flag and send the "CANCEL" command
- * asynchronously. To finish the operation, the caller has to set the
- * "allow_play" flag and signal the thread.
+ * asynchronously. To finish the operation, the caller has to call
+ * audio_output_allow_play().
*/
void audio_output_cancel(struct audio_output *ao);
+/**
+ * Set the "allow_play" and signal the thread.
+ */
+void
+audio_output_allow_play(struct audio_output *ao);
+
void audio_output_close(struct audio_output *ao);
/**