[chrony-dev] [PATCH] sys_timex: add workaround for broken ntp_adjtime() on macOS

[ Thread Index | Date Index | More chrony.tuxfamily.org/chrony-dev Archives ]


On macOS 11.0 (Big Sur) beta, ntp_adjtime() incorrectly returns timex.freq as an unsigned number. This patch is a workaround for the bug and should be removed when Apple fix the problem (assuming they will).
---
 sys_timex.c | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/sys_timex.c b/sys_timex.c
index 0a6b438..be47a12 100644
--- a/sys_timex.c
+++ b/sys_timex.c
@@ -68,6 +68,25 @@ static int sys_tai_offset;
 
 /* ================================================== */
 
+static double
+convert_timex_frequency(const struct timex *txc)
+{
+  double freq_ppm;
+
+  freq_ppm = txc->freq / FREQ_SCALE;
+
+#ifdef MACOSX
+  /* temporary work-around for Apple bug treating freq as unsigned number */
+  if (freq_ppm > 32767) {
+    freq_ppm -= 65536;
+  }
+#endif
+
+  return -freq_ppm;
+}
+
+/* ================================================== */
+
 static double
 read_frequency(void)
 {
@@ -77,7 +96,7 @@ read_frequency(void)
 
   SYS_Timex_Adjust(&txc, 0);
 
-  return txc.freq / -FREQ_SCALE;
+  return convert_timex_frequency(&txc);
 }
 
 /* ================================================== */
@@ -92,7 +111,7 @@ set_frequency(double freq_ppm)
 
   SYS_Timex_Adjust(&txc, 0);
 
-  return txc.freq / -FREQ_SCALE;
+  return convert_timex_frequency(&txc);
 }
 
 /* ================================================== */
-- 
2.24.3 (Apple Git-128)


-- 
To unsubscribe email chrony-dev-request@xxxxxxxxxxxxxxxxxxxx with "unsubscribe" in the subject.
For help email chrony-dev-request@xxxxxxxxxxxxxxxxxxxx with "help" in the subject.
Trouble?  Email listmaster@xxxxxxxxxxxxxxxxxxxx.


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/