loopback: Fix the obviously-wrong "buffer+=buffer" logic
authorAlexander E. Patrakov <patrakov@gmail.com>
Sat, 12 Sep 2015 14:27:56 +0000 (19:27 +0500)
committerTanu Kaskinen <tanuk@iki.fi>
Sun, 13 Sep 2015 16:24:10 +0000 (19:24 +0300)
Originally pointed out by Georg Chini.

Calculating buffer = buffer + (send_counter - recv_counter)
in one branch and buffer = 2 * buffer - (recv_counter - send_counter)
looks very obviously wrong. In other words, before the patch, the
contribution from the previous lines was double-counted.

src/modules/module-loopback.c

index 3b0d68d..0af3937 100644 (file)
@@ -186,7 +186,7 @@ static void adjust_rates(struct userdata *u) {
     if (u->latency_snapshot.recv_counter <= u->latency_snapshot.send_counter)
         buffer += (size_t) (u->latency_snapshot.send_counter - u->latency_snapshot.recv_counter);
     else
-        buffer += PA_CLIP_SUB(buffer, (size_t) (u->latency_snapshot.recv_counter - u->latency_snapshot.send_counter));
+        buffer = PA_CLIP_SUB(buffer, (size_t) (u->latency_snapshot.recv_counter - u->latency_snapshot.send_counter));
 
     buffer_latency = pa_bytes_to_usec(buffer, &u->sink_input->sample_spec);