RFR: JDK-8284726: Print active locale settings in hs_err reports and in VM.info

David Holmes dholmes at openjdk.java.net
Tue Apr 26 06:00:52 UTC 2022


On Tue, 12 Apr 2022 06:44:41 GMT, Thomas Stuefe <stuefe at openjdk.org> wrote:

> To analyze locale problems in native code - e.g. stemming from third-party code calling `setlocale(3)` - it would be useful to print the active locale settings in hs-err reports and in VM.info.
> 
> Patch notes: 
> - Posix is fuzzy about the exact role of LC_ALL. It defines LC_ALL as a way to set all locales in one go, but the implementation could still keep the individual categories separately and just let LC_ALL override the individual settings. Therefore I opted to print both, even though on glibc the information seems redundant.
> - Since this is Posix specific, callers require #ifndef _WIN32 in shared files. That's not nice, but the alternative would be an empty stub implementation for windows, which I find also unappealing.
> 
> Example output, Ubuntu 20.04:
> 
> Java started with LC_ALL=C:
> 
> thomas at starfish $ jcmd Simple VM.info | ack LC_
> LC_ALL=C
> LC_ALL=C
> LC_COLLATE=C
> LC_CTYPE=C
> LC_MESSAGES=C
> LC_MONETARY=C
> LC_NUMERIC=C
> LC_TIME=C
> 
> 
> Java started with my default system settings:
> 
> thomas at starfish $ jcmd Simple VM.info | ack LC_
> LC_ALL=LC_CTYPE=C;LC_NUMERIC=en_DK.UTF-8;LC_TIME=en_DK.UTF-8;LC_COLLATE=C;LC_MONETARY=en_DK.UTF-8;LC_MESSAGES=C;LC_PAPER=en_DK.UTF-8;LC_NAME=en_DK.UTF-8;LC_ADDRESS=en_DK.UTF-8;LC_TELEPHONE=en_DK.UTF-8;LC_MEASUREMENT=en_DK.UTF-8;LC_IDENTIFICATION=en_DK.UTF-8
> LC_COLLATE=C
> LC_CTYPE=C
> LC_MESSAGES=C
> LC_MONETARY=en_DK.UTF-8
> LC_NUMERIC=en_DK.UTF-8
> LC_TIME=en_DK.UTF-8

Seems reasonable - though the macro processing seems overkill for such a short list. :)

One query below.

Thanks,
David

src/hotspot/os/posix/os_posix.cpp line 575:

> 573:     const char* locale = setlocale(categories[i].c, NULL);
> 574:     st->print_cr("%s=%s", categories[i].name,
> 575:                  ((locale != NULL) ? locale : ""));

I can't see where the query version of setLocale is allowed to return NULL, but if it did isn't that different to being set to "" ?

-------------

Marked as reviewed by dholmes (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/8194


More information about the hotspot-dev mailing list