diff options
-rw-r--r-- | kern/mach_clock.c | 6 | ||||
-rw-r--r-- | kern/macros.h | 2 |
2 files changed, 5 insertions, 3 deletions
diff --git a/kern/mach_clock.c b/kern/mach_clock.c index 655adf4..2bcd232 100644 --- a/kern/mach_clock.c +++ b/kern/mach_clock.c @@ -426,9 +426,9 @@ host_get_time(host, current_time) return(KERN_INVALID_HOST); do { - current_time->seconds = mtime->seconds; - current_time->microseconds = mtime->microseconds; - } while (current_time->seconds != mtime->check_seconds); + current_time->seconds = access_once(mtime->seconds); + current_time->microseconds = access_once(mtime->microseconds); + } while (current_time->seconds != access_once(mtime->check_seconds)); return (KERN_SUCCESS); } diff --git a/kern/macros.h b/kern/macros.h index 7cc579d..c2e8545 100644 --- a/kern/macros.h +++ b/kern/macros.h @@ -52,6 +52,8 @@ #define structof(ptr, type, member) \ ((type *)((char *)(ptr) - offsetof(type, member))) +#define access_once(x) (*(volatile typeof(x) *)&(x)) + #define alignof(x) __alignof__(x) #ifndef likely |