=== modified file 'lib-src/portaudio-v19/src/hostapi/alsa/pa_linux_alsa.c'
--- old/lib-src/portaudio-v19/src/hostapi/alsa/pa_linux_alsa.c	2010-04-04 17:54:47 +0000
+++ new/lib-src/portaudio-v19/src/hostapi/alsa/pa_linux_alsa.c	2010-12-04 15:15:45 +0000
@@ -2383,6 +2383,7 @@
 /* Atomic restart of stream (we don't want the intermediate state visible) */
 static PaError AlsaRestart( PaAlsaStream *stream )
 {
+    puts("AlsaRestart");
     PaError result = paNoError;
 
     PA_ENSURE( PaUnixMutex_Lock( &stream->stateMtx ) );
@@ -2415,9 +2416,11 @@
         snd_pcm_status( self->playback.pcm, st );
         if( snd_pcm_status_get_state( st ) == SND_PCM_STATE_XRUN )
         {
+            puts("playback xrun");
             snd_pcm_status_get_trigger_tstamp( st, &t );
             self->underrun = now * 1000 - ((PaTime) t.tv_sec * 1000 + (PaTime) t.tv_usec / 1000);
-            errplayback = snd_pcm_recover( self->playback.pcm, -EPIPE, 0 );
+            errplayback = 1;
+            /* does not work:  snd_pcm_recover( self->playback.pcm, -EPIPE, 0 ); */
         }
     }
     if( self->capture.pcm )
@@ -2425,9 +2428,13 @@
         snd_pcm_status( self->capture.pcm, st );
         if( snd_pcm_status_get_state( st ) == SND_PCM_STATE_XRUN )
         {
+            puts("capture xrun");
             snd_pcm_status_get_trigger_tstamp( st, &t );
             self->overrun = now * 1000 - ((PaTime) t.tv_sec * 1000 + (PaTime) t.tv_usec / 1000);
-            errcapture = snd_pcm_recover( self->capture.pcm, -EPIPE, 0 );
+            if(! errplayback)
+            {
+                errcapture = snd_pcm_recover( self->capture.pcm, -EPIPE, 0 );
+            }
         }
     }
 

