aboutsummaryrefslogtreecommitdiff
path: root/src/output_thread.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2010-11-07 15:30:18 +0100
committerMax Kellermann <max@duempel.org>2010-11-07 15:30:18 +0100
commit4478b3ef741eecf7ed0cf94179986c6f86a57287 (patch)
treeb10d931fa854e12d813ec796e16a45ae7af930e3 /src/output_thread.c
parent5a263206803556a600a75dd5e1813feb510af268 (diff)
parentdec7090198a0bbdd91ab8c531b84624f8bde4da9 (diff)
Merge release 0.15.14 from branch 'v0.15.x'
Conflicts: NEWS configure.ac src/decoder_control.c src/decoder_control.h src/input/rewind_input_plugin.c src/output_control.c src/output_thread.c src/player_thread.c
Diffstat (limited to 'src/output_thread.c')
-rw-r--r--src/output_thread.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/output_thread.c b/src/output_thread.c
index 8b120325..380956fa 100644
--- a/src/output_thread.c
+++ b/src/output_thread.c
@@ -134,10 +134,18 @@ ao_open(struct audio_output *ao)
struct audio_format_string af_string;
assert(!ao->open);
- assert(ao->fail_timer == NULL);
assert(ao->pipe != NULL);
assert(ao->chunk == NULL);
+ if (ao->fail_timer != NULL) {
+ /* this can only happen when this
+ output thread fails while
+ audio_output_open() is run in the
+ player thread */
+ g_timer_destroy(ao->fail_timer);
+ ao->fail_timer = NULL;
+ }
+
/* enable the device (just in case the last enable has failed) */
if (!ao_enable(ao))
@@ -455,7 +463,12 @@ ao_play_chunk(struct audio_output *ao, const struct music_chunk *chunk)
/* don't automatically reopen this device for
10 seconds */
+ g_mutex_lock(ao->mutex);
+
+ assert(ao->fail_timer == NULL);
ao->fail_timer = g_timer_new();
+
+ g_mutex_unlock(ao->mutex);
return false;
}