[ntp:hackers] smearing the leap second

Hal Murray hmurray at megapathdsl.net
Sat Jul 11 08:32:21 UTC 2015

john.stultz at linaro.org said:
>> No systems support TAI.  There is no API to get time in TAI.
> Linux supports CLOCK_TAI via clock_gettime().   One can also get the
> tai_offset via adjtimex(). 

Thanks for the correction.  I thought I checked, but either I fat-fingered 
something or I tried it on an old-old system.

The man page for clock_gettime() doesn't mention CLOCK_TAI, at least not on 
any of the boxes I tried.  It is defined in /usr/include/linux/time.h (at 
least for recent kernels)

Including time.h isn't good enough on many of the systems I tried.  Maybe it 
would work if I defined the right magic feature symbol.

It gives sensible results if somebody tells the kernel the TAI offset.  ntpd 
does that if it has a leap file.

If the TAI offset isn't setup, it lies rather than giving an error.

Do you know of any distros that setup and maintain a leap file out of the box?


I couldn't find CLOCK_TAI on NetBSD or FreeBSD.


Getting TAI using the tai_offset via adjtimex() isn't trivial, at least if 
you expect your code to do the right thing when running over a leap second.  
You have to do something like:
  read tai_offset
  read time in UTC
  read tai_offset again
If the tai_offsets differ, you were reading the clock close to the leap 
second.  Try again.

These are my opinions.  I hate spam.

More information about the hackers mailing list