mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-03 16:35:06 -05:00
sys_netbsd: fix adjtime() fault on macOS
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 adjtime(). 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.
This commit is contained in:
committed by
Miroslav Lichvar
parent
93076e7e1c
commit
4b511143b8
@@ -84,9 +84,18 @@ get_offset_correction(struct timespec *raw,
|
||||
{
|
||||
struct timeval remadj;
|
||||
double adjustment_remaining;
|
||||
#ifdef MACOSX
|
||||
struct timeval tv = {0, 0};
|
||||
|
||||
if (PRV_AdjustTime(&tv, &remadj) < 0)
|
||||
LOG_FATAL("adjtime() failed");
|
||||
|
||||
if (PRV_AdjustTime(&remadj, NULL) < 0)
|
||||
LOG_FATAL("adjtime() failed");
|
||||
#else
|
||||
if (PRV_AdjustTime(NULL, &remadj) < 0)
|
||||
LOG_FATAL("adjtime() failed");
|
||||
#endif
|
||||
|
||||
adjustment_remaining = UTI_TimevalToDouble(&remadj);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user