[tz] setting TZ and calling localtime_r
eggert at cs.ucla.edu
Fri Dec 15 17:45:24 UTC 2017
On 12/15/2017 01:25 AM, Guy Harris wrote:
> as I read the Single UNIX Specification, localtime_r() (not surprisingly) honors TZ, but does not necessarily honor*changes* in TZ unless you call tzset() before calling localtime_r().
Yes, that's my understanding too (and I agree POSIX is vague here). That
is, as I understand it, although localtime_r and tzset are both required
to lock each other out safely, localtime_r is not required to call tzset
(though it is allowed to).
Also, behavior is undefined if one thread calls tzset (perhaps via
localtime, ugh) while another thread is modifying TZ or any other
environment variable (either directly, or via putenv/setenv).
Portable multithreaded programs need to call tzset before they start
threads that care about time, and they should run all their threads in
the same time zone. This limitation is fixed by localtime_rz etc., which
is in the reference implementation and in NetBSD but not elsewhere (yet).
More information about the tz