[fpc-devel] Problem with Now() and time changed by ntpd

Michael Van Canneyt michael at freepascal.org
Tue Nov 1 13:51:19 CET 2011



On Tue, 1 Nov 2011, Henry Vermaak wrote:

> On 01/11/11 11:08, Michael Van Canneyt wrote:
>> 
>> 
>> On Tue, 1 Nov 2011, Henry Vermaak wrote:
>> 
>>> On 01/11/11 10:30, Michael Van Canneyt wrote:
>>>> We'll simply need to store the next moment when the DST correction
>>>> changes, compare the result of gettimeofday with that and re-base the
>>>> time calculation. If we decide to add some check for the timestamp of
>>>> the timezone file - that would make Date(), Time() and Now() VERY
>>>> expensive operations.
>>> 
>>> This seems to be what libc does (from looking at an strace of some gcc
>>> binary).
>> 
>> Correct (I had checked as well), but the only purpose that serves is to
>> check whether the system timezone info has changed.
>> 
>> This is something that normally doesn't happen unless you move your
>> system from one timezone to another or during system setup, so I
>> question the desirability of this check.
>
> If you don't do this, daemons that were started before e.g. a daylight 
> savings update will report the wrong time after the update.  Rather solve 
> this correctly than take short cuts because you want to keep the time 
> functions "fast".  Someone can always add performance timing helpers that use 
> the correct functions on various OSes.

The problem with that is that a LOT of existing code contains many calls to 
Now() and Date(), because these calls are very cheap on Windows. If all these 
calls will suddenly cause a stat() of /etc/localtime, that's simply not acceptable, 
since that will cause a noticeable error in your reported time, as disk access 
is very slow and dependent on system load.

As I see it, it is a 2 step program:

1. First off, we must correctly take into account DST. That should fix Zejlko's problem.

2. Then we can include a variable to regulate the behaviour of detecting TZ definition
changes. (i.e. the Stat() call)

Michael.








More information about the fpc-devel mailing list