]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
Don't hang in our_round
authorMiroslav Lichvar <mlichvar@redhat.com>
Mon, 7 Jun 2010 12:14:53 +0000 (14:14 +0200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Mon, 7 Jun 2010 12:19:58 +0000 (14:19 +0200)
The routine could loop infinitely when rounding a large value, replace
it with our_lround.

sys_linux.c

index c40e99c3d117e4a4e4f967f5ffe263810239873a..641745280b04c76de4f70b8f86b3b572dfdb9d51 100644 (file)
@@ -119,18 +119,9 @@ static void handle_end_of_slew(void *anything);
 
 /* ================================================== */
 
-inline static int
-our_round(double x) {
-  int y;
-  y = (int)(x + 0.5);
-  while ((double)y < x - 0.5) y++;
-  while ((double)y > x + 0.5) y--;
-  return y;
-}
-
 inline static long
-our_lround(double x) {
-  int y;
+our_round(double x) {
+  long y;
 
   if (x > 0.0)
          y = x + 0.5;
@@ -398,7 +389,7 @@ initiate_slew(void)
 
   if (fabs(offset_register) < MAX_ADJUST_WITH_ADJTIME) {
     /* Use adjtime to do the shift */
-    offset = our_lround(1.0e6 * -offset_register);
+    offset = our_round(1.0e6 * -offset_register);
 
     offset_register += offset * 1e-6;