Use 64bit mapped time values in maptime_read when possible. The 64bit
time values in mapped time will be zero when the kernel does not support
64bit mapped time.

---
 libshouldbeinlibc/maptime.h | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/libshouldbeinlibc/maptime.h b/libshouldbeinlibc/maptime.h
index 04ce0353..cf748b99 100644
--- a/libshouldbeinlibc/maptime.h
+++ b/libshouldbeinlibc/maptime.h
@@ -48,14 +48,29 @@ extern void maptime_read (volatile struct mapped_time_value 
*mtime, struct timev
 MAPTIME_EI void
 maptime_read (volatile struct mapped_time_value *mtime, struct timeval *tv)
 {
-  do
+  if (mtime->time_value.seconds == 0)
     {
-      tv->tv_sec = mtime->seconds;
-      __sync_synchronize ();
-      tv->tv_usec = mtime->microseconds;
-      __sync_synchronize ();
+      /* If 64 bits time is not supported in the kernel.  */
+      do
+       {
+         tv->tv_sec = mtime->seconds;
+         __sync_synchronize ();
+         tv->tv_usec = mtime->microseconds;
+         __sync_synchronize ();
+       }
+      while (tv->tv_sec != mtime->check_seconds);
+    }
+  else
+    {
+      do
+       {
+         tv->tv_sec = mtime->time_value.seconds;
+         __sync_synchronize ();
+         tv->tv_usec = mtime->time_value.nanoseconds / 1000;
+         __sync_synchronize ();
+       }
+      while (tv->tv_sec != mtime->check_seconds64);
     }
-  while (tv->tv_sec != mtime->check_seconds);
 }
 
 #endif /* Use extern inlines.  */
-- 
2.49.0


Reply via email to