]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
time: Ignore interval nanoseconds on tst-itimer
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 12 Jul 2021 21:50:22 +0000 (18:50 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 4 Oct 2021 13:51:55 +0000 (10:51 -0300)
Running the test on a 4.4 kernel within KVM, the precision used on
ITIMER_VIRTUAL and ITIMER_PROF seems to different than the one used
for ITIMER_REAL (it seems the same used for CLOCK_REALTIME_COARSE and
CLOCK_MONOTONIC_COARSE).  I did not see it on other kernels, for
instance 5.11 and 4.15.

To avoid trying to guess the resolution used, do not check the
nanosecond internal values for the specific timers.

Checked on i686-linux-gnu with a 4.4 kernel.

time/tst-itimer.c

index c6d623cb19744da3d2fc4068e5cccd64b14f26dc..d5492ec37536f8c5c9ff4f878e2a79447d370d92 100644 (file)
@@ -74,7 +74,9 @@ do_test (void)
       else
        {
          TEST_COMPARE (it_old.it_interval.tv_sec, 10);
-         TEST_COMPARE (it_old.it_interval.tv_usec, 20);
+         /* Some systems might use a different precision for ITIMER_VIRTUAL
+            and ITIMER_IPROF and thus the value might be adjusted.  To avoid
+            trying to guess the resolution, we do not check it.  */
        }
 
       /* Create a periodic timer and check if the return value is the one
@@ -88,7 +90,8 @@ do_test (void)
       TEST_COMPARE (setitimer (timers[i], &(struct itimerval) { 0 }, &it_old),
                    0);
       TEST_COMPARE (it.it_interval.tv_sec, it_old.it_interval.tv_sec);
-      TEST_COMPARE (it.it_interval.tv_usec, it_old.it_interval.tv_usec);
+      if (timers[i] == ITIMER_REAL)
+       TEST_COMPARE (it.it_interval.tv_usec, it_old.it_interval.tv_usec);
 
       if (sizeof (time_t) == 4)
        continue;
@@ -114,11 +117,6 @@ do_test (void)
              TEST_COMPARE (it_old.it_interval.tv_sec, 0ull);
              TEST_COMPARE (it_old.it_interval.tv_usec, 0);
            }
-         else
-           {
-             TEST_COMPARE (it_old.it_interval.tv_sec, 0x1ffffffffull);
-             TEST_COMPARE (it_old.it_interval.tv_usec, 20);
-           }
        }
       else
        {
@@ -139,8 +137,11 @@ do_test (void)
          TEST_COMPARE (setitimer (timers[i], &(struct itimerval) { 0 },
                                   &it_old),
                        0);
-         TEST_COMPARE (it.it_interval.tv_sec, it_old.it_interval.tv_sec);
-         TEST_COMPARE (it.it_interval.tv_usec, it_old.it_interval.tv_usec);
+         if (timers[i] == ITIMER_REAL)
+           {
+             TEST_COMPARE (it.it_interval.tv_sec, it_old.it_interval.tv_sec);
+             TEST_COMPARE (it.it_interval.tv_usec, it_old.it_interval.tv_usec);
+           }
        }
       else
        {