Description
In a proprietary project we're currently locked to chrono 0.4.19 because the recent addition of caching the timezone broke our code. I have to admit that the way we propagate the change to chrono is quite hacky and that we're relying on implementation details of both glibc and chrono.
So first of: yes, the TZ variable points to a symlink which systemd changes after updating the timezone. This is even the case on desktop arch linux.
So basically we're using dbus to listen for timezone changes that come from systemd-timesyncd.
Once that happened we need to make sure that localtime_r
returns the updated value. The issue is that glibc caches the value, too. The difference is that they update it when the value of TZ
has changed. So we can simply change the value, call tzset, change the value back, call tzset again.
That hack basically works for C and worked for chrono too because it always called localtime_r
. Since that's not the case anymore, the change doesn't propagate to chrono anymore. So basically we need a way to propagate a timezone change to chrono.
Originally posted by @M1cha in #728 (comment)