Without this, the ao writer frequently complained about buffer
underruns.
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);
}