diff -ru alsa-plugins-1.0.24/pulse/pcm_pulse.c alsa-plugins-1.0.24-xrun/pulse/pcm_pulse.c
--- alsa-plugins-1.0.24/pulse/pcm_pulse.c	2011-01-26 12:05:44.000000000 +0100
+++ alsa-plugins-1.0.24-xrun/pulse/pcm_pulse.c	2011-04-19 18:03:15.164998012 +0200
@@ -654,6 +654,9 @@
 	if (!pcm->p || !pcm->p->mainloop)
 		return -EBADFD;
 
+	if (pcm->stream && pcm->underrun)
+		return pulse_start(io);
+
 	pa_threaded_mainloop_lock(pcm->p->mainloop);
 
 	if (pcm->stream) {
@@ -982,7 +985,7 @@
 	snd_config_iterator_t i, next;
 	const char *server = NULL;
 	const char *device = NULL;
-	int handle_underrun = 0;
+	int handle_underrun = 1;
 	int err;
 	snd_pcm_pulse_t *pcm;
 
