sys_timex: add workaround for broken ntp_adjtime() on macOS
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).
This commit is contained in:
parent
009f1a5ae8
commit
538e1c5eb1
1 changed files with 21 additions and 2 deletions
23
sys_timex.c
23
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 workaround 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);
|
||||
}
|
||||
|
||||
/* ================================================== */
|
||||
|
|
Loading…
Reference in a new issue