From 41cb0352145fb8f95b6c14e69beb96efdd0e9b33 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 2 Feb 2014 20:21:35 +0100 Subject: [PATCH] ao_write: Enforce a 20ms timeout. Without this, the ao writer frequently complained about buffer underruns. --- ao_write.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/ao_write.c b/ao_write.c index 52c4b11e..fc65af60 100644 --- a/ao_write.c +++ b/ao_write.c @@ -57,8 +57,17 @@ static void aow_pre_select(struct sched *s, struct task *t) if (pawd) pthread_mutex_unlock(&pawd->mutex); - if (ret == 0) - return; + if (ret == 0) { + /* + * Even though the node status is zero, we might have data + * available, but the output buffer is full. If we don't set a + * timeout here, we are woken up only if new data arrives, + * which might be too late and result in a buffer underrun in + * the playing thread. To avoid this we never sleep longer than + * the (default) buffer time. + */ + return sched_request_timeout_ms(20, s); + } sched_min_delay(s); } -- 2.39.2