VPP-1032: fix coverity warnings
[vpp.git] / src / vppinfra / time.h
index 3b89cf7..288922d 100644 (file)
@@ -242,6 +242,15 @@ unix_time_now_nsec (void)
   return 1e9 * ts.tv_sec + ts.tv_nsec;
 }
 
+always_inline void
+unix_time_now_nsec_fraction (u32 * sec, u32 * nsec)
+{
+  struct timespec ts;
+  syscall (SYS_clock_gettime, CLOCK_REALTIME, &ts);
+  *sec = ts.tv_sec;
+  *nsec = ts.tv_nsec;
+}
+
 always_inline f64
 unix_usage_now (void)
 {
@@ -254,10 +263,12 @@ unix_usage_now (void)
 always_inline void
 unix_sleep (f64 dt)
 {
-  struct timespec t;
-  t.tv_sec = dt;
-  t.tv_nsec = 1e9 * dt;
-  nanosleep (&t, 0);
+  struct timespec ts, tsrem;
+  ts.tv_sec = dt;
+  ts.tv_nsec = 1e9 * (dt - (f64) ts.tv_sec);
+
+  while (nanosleep (&ts, &tsrem) < 0)
+    ts = tsrem;
 }
 
 #else /* ! CLIB_UNIX */
@@ -274,6 +285,11 @@ unix_time_now_nsec (void)
   return 0;
 }
 
+always_inline void
+unix_time_now_nsec_fraction (u32 * sec, u32 * nsec)
+{
+}
+
 always_inline f64
 unix_usage_now (void)
 {