Subject: Re: mono_time exported? (how to make timer work correctly across settimeofday() call?)
To: Tad Hunt <tad@entrisphere.com>
From: Simon Burge <simonb@wasabisystems.com>
List: tech-kern
Date: 01/26/2002 14:29:32
Tad Hunt wrote:

> I've got the following problem.  I have a list of
> callbacks set to expire in terms of time(3).
> 
> I compute the delta from the smallest expire time
> to now, and call select(2) with the appropriate timeout.
> 
> However, using time(3) causes problems, because
> someone may change the system time while this
> process is running.  I don't want that change to
> mess up my timers.
> 
> looking through the kernel, I see that it has a
> "mono_time" variable.  This is exactly what I'm
> looking for, so I can service my callback functions
> in terms of mono_time, rather than time(2).
> 
> However, unlike "boottime", I don't see any way
> to get access to mono_time from userland.  I am
> considering adding a machdep sysctl(3) to my
> kernel to get this, but obviously this isn't
> portable.  Any other suggestions?

I'd suggest either adding a gethrtime() syscall (ala solaris and
possibly other SVR4-type OS's), or (probably better) adding a
CLOCK_MONOTIME or CLOCK_MONOTONIC for clock_{getres,gettime,settime}(2)
to use.  If we do the latter, we can easily do gethrtime() as a libc
function that calls clock_gettime() with the right arguments.

I might try and put some patches together to do that sometime today
if boredom strikes.

Simon.
--
Simon Burge                            <simonb@wasabisystems.com>
NetBSD CDs, Support and Service:    http://www.wasabisystems.com/