[LEAPSECS] Coding this week, and a trick for timeouts over leap  seconds.
    Hal Murray 
    hmurray at megapathdsl.net
       
    Sun Oct  2 04:21:10 EDT 2011
    
    
  
> Try using clock() instead of gettimeofday_in_millisecs(). The former nicely
> increments with CLOCKS_PER_SEC resolution and is immune from UTC, timezones,
> and leap seconds. At least it does on windows. Can someone comment on unix/
> linux? 
My Linux box has a man page that says:
       The  clock()  function returns an approximation of processor time
       used by the program.
So I don't think that's interesting for wait-a-while.
select, sleep, and usleep are the wait-a-while routines on POSIX systems.  I 
don't know how they are actually implemented.  I could easily imagine 
somebody turning them into wait until now+delta which might get confused by 
leap seconds.
       unsigned int sleep(unsigned int seconds);
       sleep()  makes  the  calling  process sleep until seconds seconds
       have elapsed or a signal arrives which is not ignored.
       int usleep(useconds_t usec);
       The usleep() function suspends execution of the  calling  process
       for  (at  least)  usec microseconds.  The sleep may be lengthened
       slightly by any system activity or by the time  spent  processing
       the call or by the granularity of system timers.
       int select(int nfds, fd_set *readfds, fd_set *writefds,
                  fd_set *exceptfds, struct timeval *timeout);
       timeout is an upper bound on the amount of  time  elapsed  before
       select()  returns.   If  both  fields of the timeval stucture are
       zero, then select() returns immediately.   (This  is  useful  for
       polling.)   If  timeout  is NULL (no timeout), select() can block
       indefinitely.
If I wanted to test/debug this sort of code, I would use the cycle-counter.  
Most modern chips have one.  On i386 it's called TSC.  It's not "standard" or 
portable, but you can hide it in a subroutine if you want to try to make the 
code somewhat clean.
Should we setup a web page with a recipe to fake a leap second at midnight 
tonight?
  I think it would be something like:
  kill ntpd
  run a program to tell the kernel leap-tonight
  wait till midnight
  run a program to tell the kernel no-leap
  restart ntpd
I think that needs a simple program to set the leap-tonight bits.
-- 
These are my opinions, not necessarily my employer's.  I hate spam.
    
    
More information about the LEAPSECS
mailing list