Mercurial > audlegacy-plugins
diff src/alsa/audio.c @ 2457:bb55de702ffb
alsa: Make spinlocks a bit less scary. Don't lock up in alsa_flush when output is closed.
author | Sascha Hlusiak <contact@saschahlusiak.de> |
---|---|
date | Mon, 24 Mar 2008 17:40:33 +0100 |
parents | ccfc52a92504 |
children | 11f7c096f7e6 |
line wrap: on
line diff
--- a/src/alsa/audio.c Thu Mar 20 01:37:46 2008 +0900 +++ b/src/alsa/audio.c Mon Mar 24 17:40:33 2008 +0100 @@ -53,7 +53,8 @@ static snd_mixer_elem_t *pcm_element; static snd_mixer_t *mixer; -static gboolean going, paused, mixer_start = TRUE; +static volatile gboolean going; +static gboolean paused, mixer_start = TRUE; static gboolean prebuffer, remove_prebuffer; static gboolean alsa_can_pause; @@ -64,7 +65,7 @@ static char *thread_buffer; /* audio intermediate buffer */ static int rd_index, wr_index; /* current read/write position in int-buffer */ static gboolean pause_request; /* pause status currently requested */ -static int flush_request; /* flush status (time) currently requested */ +static volatile int flush_request; /* flush status (time) currently requested */ static int prebuffer_size; GStaticMutex alsa_mutex = G_STATIC_MUTEX_INIT; @@ -329,7 +330,7 @@ void alsa_flush(int time) { flush_request = time; - while (flush_request != -1) + while ((flush_request != -1) && (going)) g_usleep(10000); }