There's similar case for capture. So update the patch. Date: Fri, 5 Aug 2011 10:33:17 -0400 Subject: [PATCH] alsa: resets POLLOUT event revents marked as POLLOUT|POLLERR|POLLWRNORM in "underrun" case, that will trigger unexpected log "ALSA woke us up to write new data to the device, but there was acturally nothing to write...". --- src/modules/alsa/alsa-sink.c | 1 + src/modules/alsa/alsa-source.c | 1 + 2 files changed, 2 insertions(+), 0 deletions(-) diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c index 0164040..ae86755 100644 --- a/src/modules/alsa/alsa-sink.c +++ b/src/modules/alsa/alsa-sink.c @@ -1627,6 +1627,7 @@ static void thread_func(void *userdata) { u->first = TRUE; u->since_start = 0; + revents = 0; } else if (revents && u->use_tsched && pa_log_ratelimit(PA_LOG_DEBUG)) pa_log_debug("Wakeup from ALSA!"); diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c index f847b1e..11052c5 100644 --- a/src/modules/alsa/alsa-source.c +++ b/src/modules/alsa/alsa-source.c @@ -1402,6 +1402,7 @@ static void thread_func(void *userdata) { goto fail; u->first = TRUE; + revents = 0; } else if (revents && u->use_tsched && pa_log_ratelimit(PA_LOG_DEBUG)) pa_log_debug("Wakeup from ALSA!"); -- 1.7.1 2011/8/4 xing wang <wangxingchao2011 at gmail.com>: > From 92b3d70c259fdc5390661e9ef6236f0173704708 Mon Sep 17 00:00:00 2001 > From: xingchao <xingchao.wang at intel.com> > Date: Wed, 13 Jul 2011 14:29:48 -0400 > Subject: [PATCH] reset revents if meet underrun case > > When meet underrun, driver will also report POLLOUT event masked with > POLLOUT|POLLERR|POLLWRNORM, that doesnot mean "wake up pa to write data". > So reset revents to 0 in case PA get confused. > --- > ?src/modules/alsa/alsa-sink.c | ? ?1 + > ?1 files changed, 1 insertions(+), 0 deletions(-) > > diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c > index c5ded40..dd2546c 100644 > --- a/src/modules/alsa/alsa-sink.c > +++ b/src/modules/alsa/alsa-sink.c > @@ -1594,6 +1594,7 @@ static void thread_func(void *userdata) { > > ? ? ? ? ? ? ? ? u->first = TRUE; > ? ? ? ? ? ? ? ? u->since_start = 0; > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? revents = 0; > ? ? ? ? ? ? ? ? pa_log_debug("Wakeup From Ayncmq!"); > ? ? ? ? ? ? } else if (revents && u->use_tsched && > pa_log_ratelimit(PA_LOG_DEBUG)) > ? ? ? ? ? ? ? ? pa_log_debug("Wakeup from ALSA!"); > -- > 1.7.1 >