On some systems, passing NULL as the first argument to adjtime, will result in 
returning the amount of adjustment outstanding from a previous call to 

On macOS this is not allowed and the adjtime call will fault. We can simulate 
the behaviour of the other systems by cancelling the current adjustment then 
restarting the adjustment using the outstanding time that was returned. On 
macOS 10.13 and later, the netbsd driver is now used and must use these 
semantics when making/measuring corrections.
 sys_netbsd.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/sys_netbsd.c b/sys_netbsd.c
index ba66b12..226b4eb 100644
--- a/sys_netbsd.c
+++ b/sys_netbsd.c
@@ -84,9 +84,18 @@ get_offset_correction(struct timespec *raw,
   struct timeval remadj;
   double adjustment_remaining;
+#ifdef MACOSX
+  struct timeval t1 = {0, 0};
+  if (PRV_AdjustTime(&t1, &remadj) < 0)
+    LOG_FATAL("adjtime() failed");
+  if (PRV_AdjustTime(&remadj, NULL) < 0)
+    LOG_FATAL("adjtime() failed");
   if (PRV_AdjustTime(NULL, &remadj) < 0)
     LOG_FATAL("adjtime() failed");
   adjustment_remaining = UTI_TimevalToDouble(&remadj);
2.11.0 (Apple Git-81)

To unsubscribe email chrony-dev-requ...@chrony.tuxfamily.org with "unsubscribe" 
in the subject.
For help email chrony-dev-requ...@chrony.tuxfamily.org with "help" in the 
Trouble?  Email listmas...@chrony.tuxfamily.org.

Reply via email to