public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "redi at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug libstdc++/114645] std::chrono::current_zone ignores $TZ on Linux
Date: Tue, 09 Apr 2024 23:29:42 +0000	[thread overview]
Message-ID: <bug-114645-4-ssCwtAYuek@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-114645-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114645

--- Comment #15 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Hristo Venev from comment #13)
> > $TZ allows you to override it per-process (and even change it during the lifetime of a process by using setenv and tzset). We don't support that for current_zone().
> 
> /etc/localtime can also change.

But not in a racy way. The filesystem serializes those changes so that
inspecting the symlink with readlink(3) gives a single race-free answer at any
one time. And if the application wants to query current_zone() once and then
reuse the result of that query, it can, because the time_zone* is a value held
by the application itself. That's an advantage of the std::chrono design which
is absent from libc, where the application has very little control over the
hidden state that libc maintains for time zone info.

> > The intent is to infer an IANA time zone from the /etc/localtime symlink, if possible. If the intent was to match libc, it would look at $TZ. I've discussed this exact question with the author of that library (which is the origin of the std::chrono components too). What I said in comment 8 above is paraphrasing what he said.
> 
> Point taken. Still, do you have any explanation for why this behavior was
> chosen?

Because the environment cannot be accessed safely, and because $TZ was
traditionally used for POSIX time zones, which are inferior to the IANA zones
in nearly every way (see the "POSIX style time zones" section of
https://stackoverflow.com/tags/timezone/info for more details).

> > Just do the easy thing yourself.
> 
> The easy thing being to fix all applications that currently use or will ever
> use current_zone(). Fun times ahead...

Well they should not be assuming current_zone() uses $TZ in the first place -
that has never been claimed or documented by any reputable source. You only
need to "fix" the ones that were relying on something that was never part of
the API.

  parent reply	other threads:[~2024-04-09 23:29 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-08 19:01 [Bug libstdc++/114645] New: " hristo at venev dot name
2024-04-08 19:27 ` [Bug libstdc++/114645] " redi at gcc dot gnu.org
2024-04-08 20:23 ` hristo at venev dot name
2024-04-08 20:25 ` redi at gcc dot gnu.org
2024-04-08 20:46 ` hristo at venev dot name
2024-04-08 20:48 ` redi at gcc dot gnu.org
2024-04-08 20:51 ` redi at gcc dot gnu.org
2024-04-08 20:56 ` hristo at venev dot name
2024-04-09  9:19 ` redi at gcc dot gnu.org
2024-04-09  9:41 ` hristo at venev dot name
2024-04-09  9:46 ` xry111 at gcc dot gnu.org
2024-04-09  9:49 ` hristo at venev dot name
2024-04-09 16:40 ` redi at gcc dot gnu.org
2024-04-09 17:19 ` hristo at venev dot name
2024-04-09 23:29 ` harald at gigawatt dot nl
2024-04-09 23:29 ` redi at gcc dot gnu.org [this message]
2024-04-09 23:43 ` redi at gcc dot gnu.org
2024-04-09 23:47 ` redi at gcc dot gnu.org
2024-04-09 23:50 ` harald at gigawatt dot nl
2024-04-09 23:57 ` redi at gcc dot gnu.org
2024-04-10  0:07 ` redi at gcc dot gnu.org
2024-04-10  0:26 ` harald at gigawatt dot nl
2024-04-10  0:57 ` redi at gcc dot gnu.org
2024-04-10  1:10 ` redi at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-114645-4-ssCwtAYuek@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).