]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Use CLOCK_MONOTONIC_COARSE where suitable
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 31 Oct 2019 13:19:06 +0000 (13:19 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 31 Oct 2019 13:19:06 +0000 (13:19 +0000)
contrib/libev/ev.c

index 82d2fa8a932b696dda193f20a936ac055325533c..c6950473102e4134a41d14a0d42a243ff32eb757 100644 (file)
@@ -1570,6 +1570,7 @@ static EV_ATOMIC_T have_realtime; /* did clock_gettime (CLOCK_REALTIME) work? */
 
 #if EV_USE_MONOTONIC
 static EV_ATOMIC_T have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */
+static EV_ATOMIC_T monotinic_clock_id;
 #endif
 
 #ifndef EV_FD_TO_WIN32_HANDLE
@@ -1892,7 +1893,7 @@ get_clock (void)
   if (expect_true (have_monotonic))
     {
       struct timespec ts;
-      clock_gettime (CLOCK_MONOTONIC, &ts);
+      clock_gettime (monotinic_clock_id, &ts);
       return ts.tv_sec + ts.tv_nsec * 1e-9;
     }
 #endif
@@ -2889,8 +2890,19 @@ loop_init (EV_P_ unsigned int flags) EV_NOEXCEPT
         {
           struct timespec ts;
 
-          if (!clock_gettime (CLOCK_MONOTONIC, &ts))
+          if (!clock_gettime (CLOCK_MONOTONIC, &ts)) {
             have_monotonic = 1;
+            monotinic_clock_id = CLOCK_MONOTONIC;
+#ifdef CLOCK_MONOTONIC_COARSE
+            if (!clock_gettime (CLOCK_MONOTONIC_COARSE, &ts) &&
+               !clock_getres (CLOCK_MONOTONIC_COARSE, &ts)) {
+              /* Check if we have at least 10ms resolution */
+              if (ts.tv_sec == 0 && ts.tv_nsec < 10ULL * 1000000) {
+                monotinic_clock_id = CLOCK_MONOTONIC_COARSE;
+              }
+            }
+#endif
+          }
         }
 #endif