diff --git a/local.c b/local.c index c0916cf..df4cee7 100644 --- a/local.c +++ b/local.c @@ -687,6 +687,19 @@ LCL_MakeStep(void) /* ================================================== */ +void +LCL_CancelOffsetCorrection(void) +{ + struct timespec raw; + double correction; + + LCL_ReadRawTime(&raw); + LCL_GetOffsetCorrection(&raw, &correction, NULL); + LCL_AccumulateOffset(correction, 0.0); +} + +/* ================================================== */ + int LCL_CanSystemLeap(void) { diff --git a/local.h b/local.h index 7ceb76a..1a6fb97 100644 --- a/local.h +++ b/local.h @@ -197,6 +197,9 @@ extern void LCL_Finalise(void); to a timezone problem. */ extern int LCL_MakeStep(void); +/* Routine to cancel the outstanding system clock correction */ +extern void LCL_CancelOffsetCorrection(void); + /* Check if the system driver supports leap seconds, i.e. LCL_SetSystemLeap does something */ extern int LCL_CanSystemLeap(void); diff --git a/main.c b/main.c index b2149b1..bde2e6c 100644 --- a/main.c +++ b/main.c @@ -104,6 +104,7 @@ MAI_CleanupAndExit(void) { if (!initialised) exit(exit_status); + LCL_CancelOffsetCorrection(); SRC_DumpSources(); /* Don't update clock when removing sources */