diff -Nur xmms-1.2.10.orig/Output/alsa/audio.c xmms-1.2.10/Output/alsa/audio.c --- xmms-1.2.10.orig/Output/alsa/audio.c 2004-01-28 01:09:39 +0200 +++ xmms-1.2.10/Output/alsa/audio.c 2005-11-18 17:26:56 +0200 @@ -183,17 +183,35 @@ void alsa_pause(short p) { + int err; + debug("alsa_pause"); - if (p) - paused = TRUE; - - if (alsa_can_pause) - snd_pcm_pause(alsa_pcm, p); - else if (p) - snd_pcm_drop(alsa_pcm); - - if (!p) - paused = FALSE; + if (alsa_can_pause) { + if (p) { + paused = TRUE; + debug("alsa can pause, paused"); + } else { + paused = FALSE; + debug("alsa can pause, continued"); + } + if ((err = snd_pcm_pause(alsa_pcm, p)) < 0) + debug("snd_pcm_pause error: %s\n", + snd_strerror(err)); + } else { + if (p) { + paused = TRUE; + debug("alsa can't pause, dropped"); + if ((err = snd_pcm_drop(alsa_pcm)) < 0) + debug("snd_pcm_drop error: %s\n", + snd_strerror(err)); + } else { + paused = FALSE; + debug("alsa can't pause, prepared"); + if ((err = snd_pcm_prepare(alsa_pcm)) < 0) + debug("snd_pcm_prepare error: %s\n", + snd_strerror(err)); + } + } } void alsa_close(void)