sys_linux: always call TMX_SetLeap() in set_leap()

The optimization avoiding unnecessary setting of the kernel leap status
can cause a problem when something outside chronyd sets the status to
the new expected value. There will be no TMX_SetLeap() call which would
update the saved status and the kernel status will be overwritten with
the old (incorrect) value in a later TMX_*() call.

Always call TMX_SetLeap() to save the new value and for the log message
selection just check if a leap second has been applied.
This commit is contained in:
Miroslav Lichvar
2015-08-26 14:45:36 +02:00
parent d73394dde1
commit 770db1fe02
3 changed files with 5 additions and 14 deletions

View File

@@ -124,7 +124,7 @@ TMX_SetLeap(int leap)
}
int
TMX_GetLeap(int *leap, int *applied)
TMX_GetLeapApplied(int *applied)
{
struct timex txc;
int state;
@@ -134,13 +134,6 @@ TMX_GetLeap(int *leap, int *applied)
if (state < 0)
return -1;
if (txc.status & STA_INS)
*leap = 1;
else if (txc.status & STA_DEL)
*leap = -1;
else
*leap = 0;
*applied = state == TIME_WAIT;
return 0;