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