]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - ao_write.c
ao_write: Enforce a 20ms timeout.
[paraslash.git] / ao_write.c
index 52c4b11e1a11c51a419bb32bbc58c6052c7221cd..fc65af60b3ca06735474e95c89de25387c1c9702 100644 (file)
@@ -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);
 }