summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/audio_out/audio_alsa_out.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/audio_out/audio_alsa_out.c b/src/audio_out/audio_alsa_out.c
index 865944b21..0187a40de 100644
--- a/src/audio_out/audio_alsa_out.c
+++ b/src/audio_out/audio_alsa_out.c
@@ -26,7 +26,7 @@
* (c) 2001 James Courtier-Dutton <James@superbug.demon.co.uk>
*
*
- * $Id: audio_alsa_out.c,v 1.130 2004/03/18 07:26:24 pmhahn Exp $
+ * $Id: audio_alsa_out.c,v 1.131 2004/03/19 13:17:47 f1rmb Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -118,6 +118,7 @@ typedef struct alsa_driver_s {
long left_vol;
long right_vol;
int mute;
+ int running;
} mixer;
} alsa_driver_t;
@@ -171,6 +172,7 @@ static int __snd_mixer_wait(snd_mixer_t *mixer, int timeout) {
static void *ao_alsa_handle_event_thread(void *data) {
alsa_driver_t *this = (alsa_driver_t *) data;
+ this->mixer.running = 1;
do {
if(__snd_mixer_wait(this->mixer.handle, 333) > 0) {
@@ -255,7 +257,7 @@ static void *ao_alsa_handle_event_thread(void *data) {
pthread_mutex_unlock(&this->mixer.mutex);
}
- } while(1);
+ } while(this->mixer.running);
pthread_exit(NULL);
}
@@ -863,7 +865,6 @@ static uint32_t ao_alsa_get_capabilities (ao_driver_t *this_gen) {
static void ao_alsa_exit(ao_driver_t *this_gen) {
alsa_driver_t *this = (alsa_driver_t *) this_gen;
- pthread_mutex_destroy(&this->mixer.mutex);
/*
* Destroy the mixer thread and cleanup the mixer, so that
* any child processes (such as xscreensaver) cannot inherit
@@ -874,12 +875,13 @@ static void ao_alsa_exit(ao_driver_t *this_gen) {
*/
if(this->mixer.handle) {
- pthread_cancel(this->mixer.thread);
+ this->mixer.running = 0;
pthread_join(this->mixer.thread, NULL);
snd_mixer_close(this->mixer.handle);
this->mixer.handle=0;
}
-
+ pthread_mutex_destroy(&this->mixer.mutex);
+
if (this->audio_fd) snd_pcm_close(this->audio_fd);
this->audio_fd=NULL;
free (this);