]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
ao_write: Enforce a 20ms timeout.
authorAndre Noll <maan@systemlinux.org>
Sun, 2 Feb 2014 19:21:35 +0000 (20:21 +0100)
committerAndre Noll <maan@systemlinux.org>
Sun, 6 Apr 2014 06:53:25 +0000 (08:53 +0200)
Without this, the ao writer frequently complained about buffer
underruns.

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);
 }