X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;ds=sidebyside;f=ao_write.c;fp=ao_write.c;h=fc65af60b3ca06735474e95c89de25387c1c9702;hb=41cb0352145fb8f95b6c14e69beb96efdd0e9b33;hp=52c4b11e1a11c51a419bb32bbc58c6052c7221cd;hpb=751e3811e99c744f9f651b191950010ce118eb78;p=paraslash.git 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); }