[tz] Timezone change detection

Paul Eggert eggert at cs.ucla.edu
Sat Sep 4 16:25:36 UTC 2021

On 9/4/21 2:05 AM, Christos Zoulas wrote:
> Perhaps we should add a  "const char *tzgetpath(const timezone_t);" so that the application can use whatever mechanism it wants to detect staleness (but that would require adding more information to timezone_t). If we want to implement staleness checks in the library, we should do this by adding the information to detect staleness in timezone_t, not using static variables (which are also not thread safe, and don't work with the "z" variants).

The approach I had thought of would be to add a tzalloc variant in which 
you specify a flag saying "I want this timezone_t to be updated if the 
system changes timezone or timezone data". Using that flag would slow 
down localtime_rz calls that use the resulting timezone_t. There might 
be multiple flags depending on how much checking you want.

This approach would insulate apps from the details of staleness 
checking. It'd allow the implementation to go to a Google-like approach, 
for example, where there's just one big file with all the TZif data 
inside it.

This approach would affect only the relatively few apps that use 
localtime_rz, though. For apps using localtime and localtime_r, surely 
it'd be OK for us to change tzset so that it always checks the 
filesystem (which it doesn't always do now), and to make this change 
only for explicit calls to tzset. That wouldn't break many applications, 
as nobody expects localtime results to be consistent across explicit 
tzset boundaries.

As for localtime routinely checking a la Darwin, that's problematic for 
the semantic reasons already discussed. If we do that, I suspect we 
should do it only if a build-time option tells us to. And perhaps we'd 
need two options, one for "look for changes to the sysadmin's selection 
of the default timezone", and one for "look for changes to the database".

More information about the tz mailing list