htpd: trivial simplification in random interval selection
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 9 Feb 2014 14:35:04 +0000 (15:35 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 9 Feb 2014 14:35:04 +0000 (15:35 +0100)
function                                             old     new   delta
poll_interval                                         57      52      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/ntpd.c

index 03fe448ca92eb6cea650bb7d61ba3024ee92fba1..bf8ef0a896512d83f39ee62d5c766961d0647155 100644 (file)
@@ -1660,13 +1660,14 @@ retry_interval(void)
 static unsigned
 poll_interval(int exponent)
 {
-       unsigned interval, r;
+       unsigned interval, r, mask;
        exponent = G.poll_exp + exponent;
        if (exponent < 0)
                exponent = 0;
        interval = 1 << exponent;
+       mask = ((interval-1) >> 4) | 1;
        r = random();
-       interval += ((r & (interval-1)) >> 4) + ((r >> 8) & 1); /* + 1/16 of interval, max */
+       interval += r & mask; /* ~ random(0..1) * interval/16 */
        VERB4 bb_error_msg("chose poll interval:%u (poll_exp:%d exp:%d)", interval, G.poll_exp, exponent);
        return interval;
 }