Branch: refs/heads/smoke-me/khw-env
  Home:   https://github.com/Perl/perl5
  Commit: b701d55137f82c0250c4dec3301fe4503ddfdaa0
      
https://github.com/Perl/perl5/commit/b701d55137f82c0250c4dec3301fe4503ddfdaa0
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale.t

  Log Message:
  -----------
  lib/locale.t:

Fixes #21697.

On some platforms, a locale name is specified in the code page (or
code set) that applies to it, rather than plain ASCII.  Windows, and
hence MingW, is the prime example.

The locale name for a particular Turkish variety found in MingW is
"Turkish_T?????.1254" where the question marks represent different
characters that have meaning in the 1254 code page, but would look like
mojibake if I had reproduced their actual values here.

When doing a setlocale() here, if the current code page is incompatible
with the new one, it will fail; if compatible it will succeed.

On my box running MingW, locales are tried out by this test file in
alphabetical order, and the one before this Turkish happens to be Thai,
with a code page of 874.  Apparently 1254 is not compatible with 874, so
switching directly from Thai to Turkish fails.

The solution is to switch into a neutral code page before switching into
one being trialed.  "C" works in this case, and I suspect in all others.


  Commit: 2af725ed2430646ce8d0e16bddca0c4234911d39
      
https://github.com/Perl/perl5/commit/2af725ed2430646ce8d0e16bddca0c4234911d39
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M charclass_invlists.h
    M lib/unicore/Makefile
    M lib/unicore/mktables
    M lib/unicore/uni_keywords.pl
    M regcharclass.h
    M uni_keywords.h

  Log Message:
  -----------
  mktables more verbose


  Commit: 39bcbd1cc13869689653e2392226fd7cb042f5d4
      
https://github.com/Perl/perl5/commit/39bcbd1cc13869689653e2392226fd7cb042f5d4
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/Pod-Simple/lib/Pod/Simple/BlackBox.pm

  Log Message:
  -----------
  BlackBox dont use rare scripts


  Commit: f2d687eb370041802b59dd036a1b25151cdedbf7
      
https://github.com/Perl/perl5/commit/f2d687eb370041802b59dd036a1b25151cdedbf7
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/harness

  Log Message:
  -----------
  XXX t/harness temp tweaks


  Commit: 015705ca2c13b39433b3d6b838b3b13562924649
      
https://github.com/Perl/perl5/commit/015705ca2c13b39433b3d6b838b3b13562924649
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/harness

  Log Message:
  -----------
  XXX skip croak.t under sanitizer


  Commit: a7ae3b357a2d7cce6138abc804b7b4fe9a48a02f
      
https://github.com/Perl/perl5/commit/a7ae3b357a2d7cce6138abc804b7b4fe9a48a02f
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/porting/bincompat.t

  Log Message:
  -----------
  skip bincompat.t


  Commit: 7056dcfb44c0aa03c005b9e484f6e9deb1bde916
      
https://github.com/Perl/perl5/commit/7056dcfb44c0aa03c005b9e484f6e9deb1bde916
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/TEST

  Log Message:
  -----------
  Skip cpan testing message


  Commit: 3ba1bca597d349aef5a5f8bdc44cac41196fed43
      
https://github.com/Perl/perl5/commit/3ba1bca597d349aef5a5f8bdc44cac41196fed43
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/TEST

  Log Message:
  -----------
  Also skip non-thread dist testing


  Commit: 7217d8160be3b35c987907c8f036ea2d06ba64d8
      
https://github.com/Perl/perl5/commit/7217d8160be3b35c987907c8f036ea2d06ba64d8
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/Archive-Tar/t/02_methods.t

  Log Message:
  -----------
  XXX skip Archive-Tar because of symlinks


  Commit: e1fcf31ffb02f93551a6d42a72e875b46ac8eb89
      
https://github.com/Perl/perl5/commit/e1fcf31ffb02f93551a6d42a72e875b46ac8eb89
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/porting/cmp_version.t

  Log Message:
  -----------
  XXX skip cmp_version.t because of sym links


  Commit: 1dabce2075fbf3aae6dfc87c0f3cc4bb4bb646d5
      
https://github.com/Perl/perl5/commit/1dabce2075fbf3aae6dfc87c0f3cc4bb4bb646d5
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/Sys-Syslog/t/syslog-inet-udp.t
    M cpan/Sys-Syslog/t/syslog.t

  Log Message:
  -----------
  XXX skip syslog tests because fail without LC_TIME


  Commit: c26c7389b41bb6546bf07f5c7f779cf517c296e1
      
https://github.com/Perl/perl5/commit/c26c7389b41bb6546bf07f5c7f779cf517c296e1
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M dist/Tie-File/t/29a_upcopy.t

  Log Message:
  -----------
  up timeout for dist/Tie-File/t/29a_upcopy.t


  Commit: aa3aa165b5d64716701221747b9aee261423cc29
      
https://github.com/Perl/perl5/commit/aa3aa165b5d64716701221747b9aee261423cc29
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M MANIFEST
    A t/uni/idstart.pl
    A t/uni/idstart00.t
    A t/uni/idstart01.t
    A t/uni/idstart02.t
    A t/uni/idstart03.t
    A t/uni/idstart04.t
    A t/uni/idstart05.t
    A t/uni/idstart06.t
    A t/uni/idstart07.t
    A t/uni/idstart08.t
    A t/uni/idstart09.t
    A t/uni/idstart10.t
    A t/uni/idstart11.t
    A t/uni/idstart12.t
    A t/uni/idstart13.t
    A t/uni/idstart14.t
    A t/uni/idstart15.t
    A t/uni/idstart16.t
    A t/uni/idstart17.t
    A t/uni/idstart18.t
    A t/uni/idstart19.t
    A t/uni/idstart20.t
    A t/uni/idstart21.t
    A t/uni/idstart22.t
    A t/uni/idstart23.t
    M t/uni/variables.t

  Log Message:
  -----------
  Split t/uni/variables.t into multiple tests

These can be done in parallel; otherwise this is often the test that
finishes last, holding up the test suite completion.


  Commit: d20bf58768964370b37b4923abde3a7680ebb29f
      
https://github.com/Perl/perl5/commit/d20bf58768964370b37b4923abde3a7680ebb29f
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/run/locale.t

  Log Message:
  -----------
  run/locale.t: more debug


  Commit: 18f3d6a8a82b5b5a13dbc100cc8cce79922856c1
      
https://github.com/Perl/perl5/commit/18f3d6a8a82b5b5a13dbc100cc8cce79922856c1
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M MANIFEST
    M charclass_invlists.h
    M lib/unicore/mktables
    M lib/unicore/uni_keywords.pl
    M regcharclass.h
    A t/re/uniprops11.t
    A t/re/uniprops12.t
    A t/re/uniprops13.t
    A t/re/uniprops14.t
    A t/re/uniprops15.t
    A t/re/uniprops16.t
    A t/re/uniprops17.t
    A t/re/uniprops18.t
    A t/re/uniprops19.t
    A t/re/uniprops20.t
    A t/re/uniprops21.t
    A t/re/uniprops22.t
    A t/re/uniprops23.t
    A t/re/uniprops24.t
    M uni_keywords.h

  Log Message:
  -----------
  Make 24 uniprops.t tests


  Commit: 93dbc01fe52f2948538fab463b93e16167dd45d3
      
https://github.com/Perl/perl5/commit/93dbc01fe52f2948538fab463b93e16167dd45d3
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M perl.h

  Log Message:
  -----------
       XXX temp to test broken lconv on non-Windows


  Commit: 32fcd5af61e23e66c88db05b0e0e4f4d3f1752fd
      
https://github.com/Perl/perl5/commit/32fcd5af61e23e66c88db05b0e0e4f4d3f1752fd
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/run/locale.t

  Log Message:
  -----------
  XXX run/locale.t: maybe f move test


  Commit: 5edf71a912fa68c3d30d67b70b68ea1fbca7a51b
      
https://github.com/Perl/perl5/commit/5edf71a912fa68c3d30d67b70b68ea1fbca7a51b
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/version/t/07locale.t
    M t/porting/customized.dat

  Log Message:
  -----------
  version::07locale.t: Use I18N::Langinfo, not POSIX::localeconv()

The former is always present; the latter might not be.


  Commit: c3a98965f1091f9ac137d0d3d720c0564973bb2f
      
https://github.com/Perl/perl5/commit/c3a98965f1091f9ac137d0d3d720c0564973bb2f
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/porting/cmp_version.t

  Log Message:
  -----------
  XXX skip cmp_version.t prob. due to 5.38 tag issue


  Commit: eea712009554698afc46ea2d7d92e61b6f1f4e46
      
https://github.com/Perl/perl5/commit/eea712009554698afc46ea2d7d92e61b6f1f4e46
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/version/t/07locale.t
    M t/porting/customized.dat

  Log Message:
  -----------
  version 07locale.t should use LC_NUMERIC, not ALL

These outliers don't belong.  This file is working on LC_NUMERIC only.


  Commit: 91390f7f7f143aa3f677f9c3de769fa6a09ab762
      
https://github.com/Perl/perl5/commit/91390f7f7f143aa3f677f9c3de769fa6a09ab762
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M makedef.pl
    M perl.h

  Log Message:
  -----------
  XXX temporary: Allow undef LC_ALL


  Commit: 72f9bb8e2c3e9c789b6b9c14b48a3421725dcaed
      
https://github.com/Perl/perl5/commit/72f9bb8e2c3e9c789b6b9c14b48a3421725dcaed
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  perl.h: Fake up win32 compile a bit


  Commit: 7c3e06d21f2444539792efda63e35d2c863a16ee
      
https://github.com/Perl/perl5/commit/7c3e06d21f2444539792efda63e35d2c863a16ee
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M sv.c

  Log Message:
  -----------
  newSVbool(): Fix compiler warning

The parameter was declared const in embed.fnc, but not in the function
prototype


  Commit: 98c09b29e132836e2b4b8f6af5950a1fc6c03531
      
https://github.com/Perl/perl5/commit/98c09b29e132836e2b4b8f6af5950a1fc6c03531
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M proto.h

  Log Message:
  -----------
  regnode_after(): Fix compiler warning

A parameter to this function was declared const in its prototype but not
in embed.fnc.


  Commit: 24badae6fc0de436163a1986d6dd2288bd0d631d
      
https://github.com/Perl/perl5/commit/24badae6fc0de436163a1986d6dd2288bd0d631d
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M proto.h
    M utf8.c

  Log Message:
  -----------
  uvoffuni_to_utf8_flags_msgs(): Fix compiler warning

A parameter to this function was declared const in embed.fnc, but isn't
const.

This commit also adds a const to another parameter that is constant.


  Commit: 4277c4a7898f826dff49b7c158a486766a8822e6
      
https://github.com/Perl/perl5/commit/4277c4a7898f826dff49b7c158a486766a8822e6
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M proto.h

  Log Message:
  -----------
  S_clear_placeholders(): Fix compiler warning

A parameter to this function was declared const in its prototype but not
in embed.fnc, and had a different name


  Commit: 5011a8f466edae530d3c9890a08a4629b727b3a8
      
https://github.com/Perl/perl5/commit/5011a8f466edae530d3c9890a08a4629b727b3a8
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M proto.h
    M util.c

  Log Message:
  -----------
  XXX memlog


  Commit: 4939346dd1e231300564ea0b134216d2c53d765b
      
https://github.com/Perl/perl5/commit/4939346dd1e231300564ea0b134216d2c53d765b
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M perl.h
    M t/run/switchDx.t

  Log Message:
  -----------
  debug thread


  Commit: ff0f2d8664b021e1a0c2a81883e02491dbedbbc6
      
https://github.com/Perl/perl5/commit/ff0f2d8664b021e1a0c2a81883e02491dbedbbc6
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M dist/threads/threads.xs

  Log Message:
  -----------
  threads.xs DEBUG_U


  Commit: 38ce44bbbc5d0ff2044d95736b74d3a0ef6ec7fb
      
https://github.com/Perl/perl5/commit/38ce44bbbc5d0ff2044d95736b74d3a0ef6ec7fb
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale.t

  Log Message:
  -----------
  XXX temp: lib/locale.t: debug


  Commit: 7d95b8c3a2eeecc10cdd6fa09fa3535beb0e47e9
      
https://github.com/Perl/perl5/commit/7d95b8c3a2eeecc10cdd6fa09fa3535beb0e47e9
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale.t

  Log Message:
  -----------
  lib/locale.t FILE debug


  Commit: 94bd76f4bd6226ae621d4bafe7b0909a0dd91183
      
https://github.com/Perl/perl5/commit/94bd76f4bd6226ae621d4bafe7b0909a0dd91183
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale.t

  Log Message:
  -----------
  lib/locale.t


  Commit: 734921a6a447c0ee7918531279d40d8ea8b6520f
      
https://github.com/Perl/perl5/commit/734921a6a447c0ee7918531279d40d8ea8b6520f
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  XXX perl.h: Debugging mutex lock'


  Commit: 2cbf79d7f5c924f0b6a5e9506b5decc694fbf284
      
https://github.com/Perl/perl5/commit/2cbf79d7f5c924f0b6a5e9506b5decc694fbf284
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/version/t/07locale.t
    M t/porting/customized.dat

  Log Message:
  -----------
  07locale.t: Add some Windows locales to try

On various windows machines, none of the locales listed in <DATA> exist.
This commit copies ones from core's loc_tools.pl to give additional
possibilities to try


  Commit: c29001e54d96a16d0f2827a5cb697751f207c41a
      
https://github.com/Perl/perl5/commit/c29001e54d96a16d0f2827a5cb697751f207c41a
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/version/t/07locale.t

  Log Message:
  -----------
  cpan/version/07locale.t: drop, bug have to recompute md5


  Commit: a32a4e3a2acc2f390ec7dec18b39963d5b4f3f04
      
https://github.com/Perl/perl5/commit/a32a4e3a2acc2f390ec7dec18b39963d5b4f3f04
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/porting/customized.dat

  Log Message:
  -----------
  customized.dat


  Commit: 73d9a3761cfb67752e7729323f1f4ad2a8dcb019
      
https://github.com/Perl/perl5/commit/73d9a3761cfb67752e7729323f1f4ad2a8dcb019
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  S_find_locale_from_environment: Handle disparate LC_ALL

Prior to this commit, it was possible on some platforms to improperly
set a locale category from a locale of "".

Consider:

export LC_ALL="LC_CTYPE=de_DE;LC_NUMERIC=C;LC_TIME=de_DE;..."

and then run

    print POSIX::setlocale(LC_NUMERIC, "");

It wouldn't know how to extract just the LC_NUMERIC part of the LC_ALL
string.

There is no test added because I didn't find a shell that allows setting
LC_ALL to such a disparate value.


  Commit: 7d1a7afc090275cfa9d8da63896ac768a03e2fe4
      
https://github.com/Perl/perl5/commit/7d1a7afc090275cfa9d8da63896ac768a03e2fe4
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/loc_tools.pl

  Log Message:
  -----------
  loc_tools: XXX Debug


  Commit: 3191a2452755f1a81d71a09192f048e05af897d2
      
https://github.com/Perl/perl5/commit/3191a2452755f1a81d71a09192f048e05af897d2
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  S_querylocale_2008_i:  Add entry assertion


  Commit: dc95edc96c39cc9837563555bf884372c324309f
      
https://github.com/Perl/perl5/commit/dc95edc96c39cc9837563555bf884372c324309f
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  S_bool_setlocale_i: Add entry assertion


  Commit: 6553aeb8372b3ae6eeac1fc4f4ace7e88f6eacba
      
https://github.com/Perl/perl5/commit/6553aeb8372b3ae6eeac1fc4f4ace7e88f6eacba
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  savepv if threaded, unused I think


  Commit: 32af79457d20728362ef4f73109ccb756f8a166d
      
https://github.com/Perl/perl5/commit/32af79457d20728362ef4f73109ccb756f8a166d
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M hints/darwin.sh

  Log Message:
  -----------
  darwin hints querylocale race in earlier darwins?


  Commit: f45fe61915ee1fa587ba469e9b17bec4910a4dae
      
https://github.com/Perl/perl5/commit/f45fe61915ee1fa587ba469e9b17bec4910a4dae
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M pp.c

  Log Message:
  -----------
  pp_study: Add memory use debugging


  Commit: 27d5902ac99b999a5f9fb0ac1d26e85a354bc17d
      
https://github.com/Perl/perl5/commit/27d5902ac99b999a5f9fb0ac1d26e85a354bc17d
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M pp.c

  Log Message:
  -----------
  Revert "pp_study: Add memory use debugging"


  Commit: f379f12ee9aaeba9224a3334d6fa41e9c82408ac
      
https://github.com/Perl/perl5/commit/f379f12ee9aaeba9224a3334d6fa41e9c82408ac
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M hints/darwin.sh

  Log Message:
  -----------
  darwin


  Commit: fe20d427ab52a05dd106fc3815cc0491b3c9172a
      
https://github.com/Perl/perl5/commit/fe20d427ab52a05dd106fc3815cc0491b3c9172a
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M hints/freebsd.sh

  Log Message:
  -----------
  Enable thread-safe locales on some freebsd versions

This had been disabled in the hints file due to bugs, which perl now
works around, so reenable (and reformat some lines for clarity)


  Commit: f0b391b645ed16e27ee85b358c59a917707b6e0e
      
https://github.com/Perl/perl5/commit/f0b391b645ed16e27ee85b358c59a917707b6e0e
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/run/locale.t

  Log Message:
  -----------
  t/run/locale.t: debug


  Commit: cebe9820484280a621e0aef1515a43a7ed402d89
      
https://github.com/Perl/perl5/commit/cebe9820484280a621e0aef1515a43a7ed402d89
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale_threads.t

  Log Message:
  -----------
  locale_threads: add a commented out yield


  Commit: 3856f6aad5ed888bb49a9ff38c45e4946819fee5
      
https://github.com/Perl/perl5/commit/3856f6aad5ed888bb49a9ff38c45e4946819fee5
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale_threads.t

  Log Message:
  -----------
  locale_threads: debugging


  Commit: fdb366d0b975db44cc8949155398a8dc207d93e6
      
https://github.com/Perl/perl5/commit/fdb366d0b975db44cc8949155398a8dc207d93e6
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  add is_cur_locale_utf8


  Commit: ccbf64263e459634c571fb9b2e1195890e6067f3
      
https://github.com/Perl/perl5/commit/ccbf64263e459634c571fb9b2e1195890e6067f3
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/Time-Piece/Piece.xs

  Log Message:
  -----------
  Time::Piece: Use reentrant API

This single line magically makes this work much better under threading,
though critical section locks need to be added as well.


  Commit: dd083717289a0294400c623757bf2f4dcc9be0ad
      
https://github.com/Perl/perl5/commit/dd083717289a0294400c623757bf2f4dcc9be0ad
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/Time-Piece/Piece.xs

  Log Message:
  -----------
  Time-Piece: Use foldEQ_locale() if available

This core function available since 5.13.2 is thread-safe and knows about
Perl internals, so is preferable to the similar libc function, which is
now used only as a fallback.  This commit also bomb proofs the code by
adding an additional fallback, specified in C89, which isn't a great
substitute, but far better than nothing.


  Commit: 2674aebf83f1cc2c16300ed9695893073129bd24
      
https://github.com/Perl/perl5/commit/2674aebf83f1cc2c16300ed9695893073129bd24
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/Time-Piece/Piece.xs

  Log Message:
  -----------
  Time-Piece: Use isSPACE_LC, not isspace; etc

isDIGIT_LC() does the same thing as isdigit when everything goes well,
but is more robust when things get more complicated.  The _LC forms are
thread safe, for example.

But note that this code doesn't work properly for a UTF-8 locale, as it
assumes that a byte and character are the same thing.  A major overhaul
would be needed to handle that.


  Commit: deb3bc92c3e79ec68cd83d5c3ec5c3bc7ee76c50
      
https://github.com/Perl/perl5/commit/deb3bc92c3e79ec68cd83d5c3ec5c3bc7ee76c50
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M thread.h

  Log Message:
  -----------
  thread.h: White space only

Indent some nested preproccessor defines


  Commit: 3a7e3427af7ece0228dcfb3a455ab0b3611c5fa9
      
https://github.com/Perl/perl5/commit/3a7e3427af7ece0228dcfb3a455ab0b3611c5fa9
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/Time-Piece/Piece.pm
    M cpan/Time-Piece/Piece.xs
    M cpan/Time-Piece/Seconds.pm
    M dist/Module-CoreList/lib/Module/CoreList.pm

  Log Message:
  -----------
  Time::Piece: Add critical sections

This calls various macros to make certain libc calls uninterruptible, so
that they can be used safely in threaded applications, when this module
is loaded with a perl that supports this.

The macros are defined to do nothing if the perl doesn't contain working
versions of them.  In such perls, the macros are also defined to do
nothing except on configurations that could have races.

Typically, an extra problem is that the libc calls return in a global
static buffer, subject to being overwritten by another thread.  But an
earlier commit defined PERL_REENTRANT, which makes those functions
transparently return in a thread-local buffer instead.  That doesn't
help if the function gets interrupted by another thread; this commit
completes the process.


  Commit: 5cea263bbce3c2416b74ce091f40077c373898e3
      
https://github.com/Perl/perl5/commit/5cea263bbce3c2416b74ce091f40077c373898e3
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/Time-Piece/Piece.xs

  Log Message:
  -----------
  XXX Time::Piece strftime


  Commit: 9d546516b3270acc654591764b0a133c6d4fec08
      
https://github.com/Perl/perl5/commit/9d546516b3270acc654591764b0a133c6d4fec08
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M cpan/Time-Piece/Piece.xs

  Log Message:
  -----------
  Time-Piece: notes to myself


  Commit: ae3884a9fa263ebbd159051e50ef2104484f8e9c
      
https://github.com/Perl/perl5/commit/ae3884a9fa263ebbd159051e50ef2104484f8e9c
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M util.c
    M win32/perlhost.h

  Log Message:
  -----------
  XXX Win32 mem log


  Commit: ff7d50dd8e17f3de3fd198483b4e6215916d5a72
      
https://github.com/Perl/perl5/commit/ff7d50dd8e17f3de3fd198483b4e6215916d5a72
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M util.c

  Log Message:
  -----------
  XXX util add thread to mem_log


  Commit: f110b07317c8df7330fc70a434e65e8b29ad1992
      
https://github.com/Perl/perl5/commit/f110b07317c8df7330fc70a434e65e8b29ad1992
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Debug wrap wset


  Commit: a8b9bfbb6c04e9038081ac7513118b93d0356edb
      
https://github.com/Perl/perl5/commit/a8b9bfbb6c04e9038081ac7513118b93d0356edb
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M pod/perlhacktips.pod

  Log Message:
  -----------
  XXX incomplete perlhacktips:


  Commit: bf1792e037d1e0b225ad6697d1d90ed10fd30023
      
https://github.com/Perl/perl5/commit/bf1792e037d1e0b225ad6697d1d90ed10fd30023
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M iperlsys.h

  Log Message:
  -----------
  iperlsys.h: TODO need to look at adding mutexes


  Commit: 0363d33fb73ab0f367392b7550936f77152f6a15
      
https://github.com/Perl/perl5/commit/0363d33fb73ab0f367392b7550936f77152f6a15
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M regen/reentr.pl

  Log Message:
  -----------
  reentr.pl: XXX about needing mutex


  Commit: 4a8b42ebf136cf483262efc3190ae6a40646b7f8
      
https://github.com/Perl/perl5/commit/4a8b42ebf136cf483262efc3190ae6a40646b7f8
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M dist/ExtUtils-ParseXS/lib/perlxs.pod
    M t/porting/known_pod_issues.dat

  Log Message:
  -----------
  perlxs


  Commit: 7545b093baae590eac9fa3ed780defbd3d978e1f
      
https://github.com/Perl/perl5/commit/7545b093baae590eac9fa3ed780defbd3d978e1f
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M pod/perlmod.pod

  Log Message:
  -----------
  perlmod


  Commit: b9aba51dd0de95e477b98810e1a2d30f09839ee9
      
https://github.com/Perl/perl5/commit/b9aba51dd0de95e477b98810e1a2d30f09839ee9
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M pod/perllocale.pod

  Log Message:
  -----------
  perllocale Xxx start of changes


  Commit: 273a224c9f6a89548172f43c9dbc081aea1bd5a0
      
https://github.com/Perl/perl5/commit/273a224c9f6a89548172f43c9dbc081aea1bd5a0
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M win32/config_H.gc
    M win32/config_h.PL
    M win32/config_sh.PL

  Log Message:
  -----------
  XXX config


  Commit: 1e47782fae2d78e932a5238b4b51a1df4ee0d9c2
      
https://github.com/Perl/perl5/commit/1e47782fae2d78e932a5238b4b51a1df4ee0d9c2
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/run/locale.t

  Log Message:
  -----------
  XXX t/run/locale.t


  Commit: 6ce25641274a14034c21e31819b710d2a1e69787
      
https://github.com/Perl/perl5/commit/6ce25641274a14034c21e31819b710d2a1e69787
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M pod/perlembed.pod

  Log Message:
  -----------
  f perlembed


  Commit: 71866d70d8622197df5d043adfd0d91cb1e26c5a
      
https://github.com/Perl/perl5/commit/71866d70d8622197df5d043adfd0d91cb1e26c5a
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M intrpvar.h
    M locale.c
    M perl.h

  Log Message:
  -----------
  Fixup FAKE_MINGW

This is used (by me) to partially emulate MingW on a *nix platform.  It
was passing all its tests, but I discovered that I had the wrong #if
which was hence not enabling crucial parts of the emulation.


  Commit: 0db366b2877a6e022639702f08de14fc8ad14ae2
      
https://github.com/Perl/perl5/commit/0db366b2877a6e022639702f08de14fc8ad14ae2
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale_threads.t

  Log Message:
  -----------
  locale_threads: start of using platform locales


  Commit: 949623288dbe2dae2390969e5eee6dc573a2dce5
      
https://github.com/Perl/perl5/commit/949623288dbe2dae2390969e5eee6dc573a2dce5
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale_threads.t

  Log Message:
  -----------
  Revert "locale_threads: start of using platform locales"

This reverts commit a7a8dea3aabb81a05aacaf3a26c49854a5854111.


  Commit: a29bfbde52518f95cb07f809f461810f896d0e34
      
https://github.com/Perl/perl5/commit/a29bfbde52518f95cb07f809f461810f896d0e34
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c
    M perl.c
    M sv.c

  Log Message:
  -----------
  define numeric values to be C when no USE_NUMERIC


  Commit: a27a6730d5398f1c6a5b0f15cab5490f58625296
      
https://github.com/Perl/perl5/commit/a27a6730d5398f1c6a5b0f15cab5490f58625296
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c
    M perl.c
    M sv.c

  Log Message:
  -----------
  Revert "define numeric values to be C when no USE_NUMERIC"

This reverts commit 9bb7ff6531bf9e28d635a71e6d55c752a995da2d.


  Commit: 11c2a243b930f5f74a72005c1de8c04bed1523b3
      
https://github.com/Perl/perl5/commit/11c2a243b930f5f74a72005c1de8c04bed1523b3
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Add #define to separate label from declaration

This is designed to be mostly self-documenting.


  Commit: f1e10ada814b612ec293d65bc09aa3572bff65d4
      
https://github.com/Perl/perl5/commit/f1e10ada814b612ec293d65bc09aa3572bff65d4
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Generalize save_to_buffer()

This adds a parameter to the function to give the length of the input
string to save; when -1, it acts as it did before this commit.

This will allow a string that contains embedded NUL characters to be
used with this function.  And that is needed because it turns out that
nl_langinfo() returns such a string, and Perl has never handled it
properly.  This is the first step in fixing that.


  Commit: b5731b40a17a9d18f52c09c31f095515483fdc27
      
https://github.com/Perl/perl5/commit/b5731b40a17a9d18f52c09c31f095515483fdc27
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  Revert "locale.c: Generalize save_to_buffer()"

This reverts commit be8fa81d301b9db351876a3738b93b1450c590d0.


  Commit: 8689e6b425333f784d78f0a8f47e9d9cc247b556
      
https://github.com/Perl/perl5/commit/8689e6b425333f784d78f0a8f47e9d9cc247b556
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  rulereeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee


  Commit: 09f871eac471ff6a49cff74d19f283e78bc3b194
      
https://github.com/Perl/perl5/commit/09f871eac471ff6a49cff74d19f283e78bc3b194
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Silence compiler warning

This tightens when this function is compiled to the actual
Configurations it is needed in.


  Commit: 454b0813fd9ee5ac411326a3a5fa430aa830dbd9
      
https://github.com/Perl/perl5/commit/454b0813fd9ee5ac411326a3a5fa430aa830dbd9
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  C_thous better ifdef


  Commit: fea7668986b36a7520854eb551fcda9a1a71b019
      
https://github.com/Perl/perl5/commit/fea7668986b36a7520854eb551fcda9a1a71b019
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M ext/POSIX/t/posix.t
    M ext/POSIX/t/time.t
    M ext/XS-APItest/t/locale.t
    M lib/locale.t
    M lib/locale_threads.t

  Log Message:
  -----------
  skip tests if no strftime


  Commit: 6b1e733be997061cfa716609426bb6633aea8b58
      
https://github.com/Perl/perl5/commit/6b1e733be997061cfa716609426bb6633aea8b58
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M t/loc_tools.pl

  Log Message:
  -----------
  loctools use if dumper


  Commit: 942aee019c50e12eff9d527427a6f3a80ca911be
      
https://github.com/Perl/perl5/commit/942aee019c50e12eff9d527427a6f3a80ca911be
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale.t

  Log Message:
  -----------
  XXX lib/locale.t dont scan for LC_NUMERIC


  Commit: dfee3e70c3ac23a73324084b32fc77c970f62ff4
      
https://github.com/Perl/perl5/commit/dfee3e70c3ac23a73324084b32fc77c970f62ff4
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Combine some preprocessor directives

This function is full of #if conditionals, due to the high variance in
what the capabilities of platforms are.

I tried various methods to lessen the cognitive load, like turning it
into separate functions that each suit a particular Configuration, but
it was just as complicated as before.

The code is doing set up, then the actual operation, then teardown.  The
actual operation is invariant.  What this commit does is for some of the
setup conditionals to define its own teardown macro.  The result is the
teardown looks much cleaner, and there is no possibility that it will
get out-of-sync with the setup.


  Commit: 15f21788888c064699c96929507020e4712271de
      
https://github.com/Perl/perl5/commit/15f21788888c064699c96929507020e4712271de
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M hints/freebsd.sh
    M locale.c

  Log Message:
  -----------
  Avoid unnecessary mutex lock on Windows

It turns out that Windows since VS 2015 has a completely thread-safe
localeconv() function, with its result stored in a per-thread buffer.
MingW when built with the Universal C Run Time (UCRT) also has this
property.  These are the only implementations of localeconv() I know of
like this.

There is thus no need to have a critical section on these platforms.

This commit abstracts this, so that other platforms can be added if
found to be thread-safe.


  Commit: a1736c743660b455ce5adde00080936c8d0e4d18
      
https://github.com/Perl/perl5/commit/a1736c743660b455ce5adde00080936c8d0e4d18
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  XXX msg: locale.c: Combine some more (WIn32) preprocessor directives


  Commit: ae6fe251af34a1e6b1560b4c379134245c498bfa
      
https://github.com/Perl/perl5/commit/ae6fe251af34a1e6b1560b4c379134245c498bfa
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: White space only


  Commit: e7835e23c0deaef4737f45d46ef3d8fad39aab2a
      
https://github.com/Perl/perl5/commit/e7835e23c0deaef4737f45d46ef3d8fad39aab2a
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Do simple adjustment in a critical section

This adjustment was deferred until after the critical section, but it is
only an extra conditional and variable set, whose time should be dwarfed
by the store to the hash, so I think it's all right to add it to the
critical section.


  Commit: b07099db53a7152fad4e0d8f8cbcfc46ea718780
      
https://github.com/Perl/perl5/commit/b07099db53a7152fad4e0d8f8cbcfc46ea718780
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Do localeconv() adjustments immediately unthreaded

localeconv() must be called and its struct processed in a critical
section when other threads or embedded perls could also be using it.
Something like StructCopy can't be used to save its values, as a deep
copy is needed.  Some of the processing can be expensive, so is deferred
to a separate pass after the critical section.

But if no critical section is needed, it's cheaper to do the processing
as we go along doing the copy.  A comment removed in this commit said
that the reason this wasn't done was because of an extra maintenance
cost (having to maintain the code in two places).  But when I actually
looked at what it would like like to do this, I found it is essentially
just an extra function call, not enough "extra" to worry about.


  Commit: 4e9ef19eadca36ad3ed6d28c979e264fac7d47ca
      
https://github.com/Perl/perl5/commit/4e9ef19eadca36ad3ed6d28c979e264fac7d47ca
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M ext/POSIX/lib/POSIX.pod

  Log Message:
  -----------
  start of pod for localeconv


  Commit: 67b6229bceb025e8d480606362011705f1b1d181
      
https://github.com/Perl/perl5/commit/67b6229bceb025e8d480606362011705f1b1d181
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Add struct definition as a fallback

If we ever encountered a platform that didn't have localeconv(), nor its
structure definition, this could be used to get things to work.


  Commit: 40df36ffb8ee4b0bc9fe71667fe780efc3d6e744
      
https://github.com/Perl/perl5/commit/40df36ffb8ee4b0bc9fe71667fe780efc3d6e744
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  debug populate localeconv


  Commit: 7d83b7e63a3ae6da7998f85644758cefe5d905f7
      
https://github.com/Perl/perl5/commit/7d83b7e63a3ae6da7998f85644758cefe5d905f7
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M dist/threads/threads.xs

  Log Message:
  -----------
  debug thread xs


  Commit: 41d3a5846fb675cf1b07553febf19e463deb9181
      
https://github.com/Perl/perl5/commit/41d3a5846fb675cf1b07553febf19e463deb9181
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale_threads.t

  Log Message:
  -----------
  lib/locale_threads.t: Change variable names

Using 'set' as opposed to 'group' is clearer.


  Commit: 28e67fe93dbc094236e53e256b4f733e1ec557da
      
https://github.com/Perl/perl5/commit/28e67fe93dbc094236e53e256b4f733e1ec557da
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale_threads.t

  Log Message:
  -----------
  lib/locale_threads.t: Add debugging info


  Commit: bc2dd1a48dfeda6c4b0e5460ea06050ff358b299
      
https://github.com/Perl/perl5/commit/bc2dd1a48dfeda6c4b0e5460ea06050ff358b299
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Don't mortalize my_localeconv() for internal use

For external consumption, retain the mortalization; but for internal
explicitly decrement the reference count when done.


  Commit: ece961be1dedd15b61709909dbb34ca5c5850cbe
      
https://github.com/Perl/perl5/commit/ece961be1dedd15b61709909dbb34ca5c5850cbe
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Use stable copy to compare instead of temporary

We make a copy of this temporary.  Use that going foward, and free the
temporary earlier.


  Commit: e17e745c0418c595fc63a668137eeee7e2405efc
      
https://github.com/Perl/perl5/commit/e17e745c0418c595fc63a668137eeee7e2405efc
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embedvar.h
    M intrpvar.h
    M perl.c
    M sv.c

  Log Message:
  -----------
  PL_strftime_buf


  Commit: 7aaa73b317ca969e7839c7ba992de1d37db7c0d0
      
https://github.com/Perl/perl5/commit/7aaa73b317ca969e7839c7ba992de1d37db7c0d0
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embedvar.h
    M intrpvar.h
    M perl.c
    M sv.c

  Log Message:
  -----------
  Revert "PL_strftime_buf"

This reverts commit 640625a4d9cdf9c3d8b0ff45865be221632ab8cd.


  Commit: 58eabf1af749f8b906587455d399c1376dea085f
      
https://github.com/Perl/perl5/commit/58eabf1af749f8b906587455d399c1376dea085f
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale_table.h

  Log Message:
  -----------
  C preprocessor doesn't understand 'false' means 0

So use 0 instead; 1 instead of 'true'


  Commit: 2bcfbea08c718edf8acbc1b59405086898d2f282
      
https://github.com/Perl/perl5/commit/2bcfbea08c718edf8acbc1b59405086898d2f282
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  perl.h: Move #include to earlier

The next commit will want this header's information to be available for
perl_langinfo.h.


  Commit: cfbae13fb64ea7f54611413bb3698c2a8fd6ab72
      
https://github.com/Perl/perl5/commit/cfbae13fb64ea7f54611413bb3698c2a8fd6ab72
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c
    M perl_langinfo.h

  Log Message:
  -----------
  locale.c: Compile/call S_emulate_langinfo in more Configurations

This will not compile if -DNO_LOCALE is specified, as well as
some other Configurations where various locale categories are missing or
confined to be the C locale.


  Commit: 4121240349b8d0486b3d016720c9f1f24b18bc1f
      
https://github.com/Perl/perl5/commit/4121240349b8d0486b3d016720c9f1f24b18bc1f
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Avoid unused param warnings

Under some configurations the three declarations here warned; the #ifdef
was missing a term


  Commit: cdd899702a13bf17146817bb151d7cd67a027940
      
https://github.com/Perl/perl5/commit/cdd899702a13bf17146817bb151d7cd67a027940
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M embed.h
    M proto.h

  Log Message:
  -----------
  locale.c: Don't compile unused function

Since 0b52bb633d8c55bb15f05cdb19a4b7cb071ea271, this function isn't used
unless localeconv() is available.  Don't compile it unless that is true.


  Commit: 36585f4e37a2fc099060812c3f830fab0b0ce0a6
      
https://github.com/Perl/perl5/commit/36585f4e37a2fc099060812c3f830fab0b0ce0a6
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Don't compile unused function

Since 60e050beb2e45ebd7ead7f1bf93f845b23c474b5, this function is no
longer called if -DNO_LOCALE has been specified.  Don't compile it when
not called.


  Commit: b474b41c63fa9fc06b0fe07634fd922f2b7a08f3
      
https://github.com/Perl/perl5/commit/b474b41c63fa9fc06b0fe07634fd922f2b7a08f3
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Fix bug when -DNO_LOCALE_TIME

The logic for these preprocessor conditionals is wrong.  We must change
LC_CTYPE to match LC_TIME (if the platform requires it) even when
LC_TIME is confined to be the C locale, as happens when -DNO_LOCALE_TIME
is in effect in a Configuration.

But doing so allows for simplification and hence the complete removal of
these preprocessor conditionals, as the logic is already available in
the DEALING macros that this commit replaces the previous code with


  Commit: 4812086ca37ecab085ddf63eea2293904b19f677
      
https://github.com/Perl/perl5/commit/4812086ca37ecab085ddf63eea2293904b19f677
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Change API for static strftime-related functions

This changes these functions to be called with an additional SV
parameter; their return becomes a bool success/fail.

This presents a couple of advantages:

libc strftime() now writes directly to the SV's PV, eliminating copying
or using sv_usepvn().

For internal calls where the result is immediately consumed entirely in
this file, we can use the already-existing scratch SV as the
destination.  This SV gets reused over and over, and likely will soon
reach a large enough size so that it doesn't have to grow.  Prior to
this commit, a size was guessed each time and the space freed
immediately after each use.


  Commit: fc7a464d4d5a77044233061cb0a49e56cb86eda8
      
https://github.com/Perl/perl5/commit/fc7a464d4d5a77044233061cb0a49e56cb86eda8
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Change formal parameter name

The previous commit makes the current name somewhat ambiguous; so change
it and add comments clarifying its use.


  Commit: 99e09d8d0d64cb91f3fda415efd27f96ed0a19de
      
https://github.com/Perl/perl5/commit/99e09d8d0d64cb91f3fda415efd27f96ed0a19de
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M embed.h
    M proto.h
    M sv.c

  Log Message:
  -----------
  Add newSVpvz() to create a sized SvPV.

There's no current trivial method to create a non-zero length  SV that
will hold a PV.


  Commit: 80a7265441bcf2bfdb2a0386fc23e76fcdd8e8ce
      
https://github.com/Perl/perl5/commit/80a7265441bcf2bfdb2a0386fc23e76fcdd8e8ce
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Call newSVpvz()


  Commit: 4cbaadd548390adb70ff94ab1530e38a7c2d774a
      
https://github.com/Perl/perl5/commit/4cbaadd548390adb70ff94ab1530e38a7c2d774a
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Each toggle locale must have matching restore

The next commit will want this symmetry, which until now hasn't
mattered.


  Commit: e2eb78ca66e7edec6c7a95cdb1f0ffdb676b0b62
      
https://github.com/Perl/perl5/commit/e2eb78ca66e7edec6c7a95cdb1f0ffdb676b0b62
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Use a critical section when locale is toggled

Sometimes the locale for a category has to be toggled to some other
locale, when the desired value is for a locale that isn't the current
one.

This doesn't present any problem when locales are thread-safe.  The
locale gets toggled back before any other work is done.

But when locales are not thread-safe and we have threads, another thread
can execute in the now-wrong locale.  Perl, for a few releases now,
tries to mitigate the issues with running locales under threads when
yhread-safe locales are not in use, for mitigations that are easy to do.
These very well may make things work for applications that don't change
locales very much; say only on startup.

But now perl itself changes locales briefly behind an application's
back.  It turns out it is easy to add a lock that will keep threads that
otherwise would work to continue to work.

That's what this commit does, by adding TOGGLE_LOCK and TOGGLE_UNLOCK
macros that are no-ops for all but the unsafe-threaded locale
implementation.

The unused parameter to the macros is for future use.


  Commit: 22ac2b67f709cb2dc051f4e46f58ad61898eaf4b
      
https://github.com/Perl/perl5/commit/22ac2b67f709cb2dc051f4e46f58ad61898eaf4b
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale.t
    M locale.c

  Log Message:
  -----------
  fix alt0 for no_nl


  Commit: 40de5073f4d066abe35fd99fa8651104aba75552
      
https://github.com/Perl/perl5/commit/40de5073f4d066abe35fd99fa8651104aba75552
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  SvPV nomg


  Commit: 80d0d3c3ce32127c0270e31de74ec6cbd64537c3
      
https://github.com/Perl/perl5/commit/80d0d3c3ce32127c0270e31de74ec6cbd64537c3
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  shorten_toggle


  Commit: 4dfdefdb577f8f80b8d2dabb6b7734c3afd51a02
      
https://github.com/Perl/perl5/commit/4dfdefdb577f8f80b8d2dabb6b7734c3afd51a02
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Swap the order of two functions

The new ordering will make the diffs less in the next commit, and will
make just as much sense going forward as the previous ordering.


  Commit: 1450d9e6445d59ae6ab48d0c0d5b48be70ae1073
      
https://github.com/Perl/perl5/commit/1450d9e6445d59ae6ab48d0c0d5b48be70ae1073
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Pass locale to strftime functions


  Commit: 53a81b63f51a5ec7608295c4380d61959982acda
      
https://github.com/Perl/perl5/commit/53a81b63f51a5ec7608295c4380d61959982acda
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  querylocale

Maybe use C in the callers


  Commit: 21b1b403e290f642c7ee7928a6fa25b4bafa655d
      
https://github.com/Perl/perl5/commit/21b1b403e290f642c7ee7928a6fa25b4bafa655d
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Revert "querylocale"

This reverts commit b6ea27aa76a1c8785e84df9a1a42f1a71dcc81e2.


  Commit: 5ecf7001be531dacf8e3a419274ef33e8931dc89
      
https://github.com/Perl/perl5/commit/5ecf7001be531dacf8e3a419274ef33e8931dc89
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  toggle2


  Commit: a5a9a9fa101c3c03afffe969753b9761f66a6931
      
https://github.com/Perl/perl5/commit/a5a9a9fa101c3c03afffe969753b9761f66a6931
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  Add DEBUG_SETLOCALE_INCONSISTENCIES


  Commit: 7cabc4fba6b5435a6292c56351b10e55641f3df8
      
https://github.com/Perl/perl5/commit/7cabc4fba6b5435a6292c56351b10e55641f3df8
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  Enable DEBUG_SETLOCALE_INCONSISTENCIES


  Commit: 4a421d9262a99d96dc4bd2e05224cdb96a5cf545
      
https://github.com/Perl/perl5/commit/4a421d9262a99d96dc4bd2e05224cdb96a5cf545
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Make numeric standard inconsistent


  Commit: 572a43dc988f76327ad47899d5603c3a0502822b
      
https://github.com/Perl/perl5/commit/572a43dc988f76327ad47899d5603c3a0502822b
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M embed.fnc
    M embed.h
    M embedvar.h
    M handy.h
    M inline.h
    M intrpvar.h
    M locale.c
    M makedef.pl
    M mg.c
    M perl.c
    M perl.h
    M pod/perlvar.pod
    M proto.h
    M sv.c

  Log Message:
  -----------
  Add ability to emulate thread-safe locale operations

Locale information was originally global for an entire process.  Later,
it was realized that different threads could want to be running in
different locales.  Windows added this ability, and POSIX 2008 followed
suit (though using a completely different API).  When available, perl
automatically uses these capabilities.

But many platforms have neither, or their implementation, such as on
Darwin, is buggy.  This commit adds the capability for Perl programs to
operate as if the platform were thread-safe.

This implementation is based on the observation that the underlying
locale matters only to relatively few libc calls, and only during their
execution.  It can be anything at all at any other time.  perl keeps
what the proper locale should be for each category in a a per-thread
array.  Each locale-dependent operation must be wrapped in mutex
lock/unlock operations.  The lock additionally compares what libc knows
the locale to be, and what it should be for this thread at this time,
and changes the actual locale to the proper value if necessary.  That's
all that is needed.

This commit adds macros to perl.h, for example "MBTOWC_LOCK_", that
expand to do the mutex lock, and change the global locale to the
expected value.  On perls built without this emulation capability, they
are no-ops.  All code in the perl core (unless I've missed something),
are changed to use these macros (there weren't actually many places that
needed this).  Thus, any pure perl program will automatically become
locale-thread-safe under this Configuration.

In order for XS code to also become locale-thread-safe, it must use
these macros to wrap calls to locale-dependent functions.  Relatively
few modules call such functions.  For example, the only one I found that
ships with the perl core is Time::Piece, and it has more fundamental
issues with running under threads than this.  I am preparing pull
requests for it.

Thus, this is not completely transparent to code like native-thread-safe
locale handling is.  Therefore ${^SAFE_LOCALES} returns 2 (instead of 1)
for this type of thread-safety.

Another deficiency compared to the native thread safety is when a thread
calls a non-perl library that accesses the locale.  The typical example is
Gtk (though this particular application can be configured to not be
problematic).  With the native safe threads, everything works as long as
only one such thread is used per Perl program.  That thread would then
be the only one operating in the global locale, hence there are no
conflicts.  With this emulation, all threads are operating in the global
locale, and mutexes would have to be used to prevent conflicts.  To
minimize those, the code added in this commit restores the global locale
when through to the state it was in when started.

A major concern is the performance impact.  This is after all trading
speed for accuracy.  lib/locale_threads.t is noticeably slower when this
is being used.  But that is doing multiple threads constantly using
locale-dependent operations.  I don't notice any change with the rest of
the test suite.  In pure perl, this only comes into play while in the
scope of 'use locale' or when using some of the few POSIX:: functions
that are locale-dependent.  And to some extent when formatting, but the
regular overhead there should dwarf what this adds.

This commit leaves this feature off by default.  The next commit changes
that for the next few 5.39 development releases, so we can see if there
is actually an issue.


  Commit: 02cb77ba3bf0e13a47c42827ad561b8ada67e259
      
https://github.com/Perl/perl5/commit/02cb77ba3bf0e13a47c42827ad561b8ada67e259
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  DEBUG Lv to U


  Commit: f1ee1b53f146a4f977af43558cf1ff7197b9efc6
      
https://github.com/Perl/perl5/commit/f1ee1b53f146a4f977af43558cf1ff7197b9efc6
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  CONST_CAT_TO_INDEX


  Commit: 1738d912ab601fc463d41a38a2d8c740242b4ee1
      
https://github.com/Perl/perl5/commit/1738d912ab601fc463d41a38a2d8c740242b4ee1
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  extra debug


  Commit: bdd27048037698750057f7d155c8721185c9bdfb
      
https://github.com/Perl/perl5/commit/bdd27048037698750057f7d155c8721185c9bdfb
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  more emul locks


  Commit: 4642c8fdc5066d2a38921a37e718c51801e87241
      
https://github.com/Perl/perl5/commit/4642c8fdc5066d2a38921a37e718c51801e87241
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Revert "more emul locks"

This reverts commit 4733a1674423ee47b33eb0ee1882e1bf39faa1a6.


  Commit: a469b1bc96bf0bec771feb88cd4983a5dd8abc8e
      
https://github.com/Perl/perl5/commit/a469b1bc96bf0bec771feb88cd4983a5dd8abc8e
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  langinfo lock


  Commit: d2108af90e74a9609d7e6a1427a6e1986eeaf99e
      
https://github.com/Perl/perl5/commit/d2108af90e74a9609d7e6a1427a6e1986eeaf99e
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Revert "langinfo lock"

This reverts commit acaff35d7ed83830fb36c149aafede5cdf400061.


  Commit: 7f95846e4f5248e823b3899aecd58c00935ede3e
      
https://github.com/Perl/perl5/commit/7f95846e4f5248e823b3899aecd58c00935ede3e
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  lock mask


  Commit: c706bf56273789a3fdb436594fa8b528db1d796f
      
https://github.com/Perl/perl5/commit/c706bf56273789a3fdb436594fa8b528db1d796f
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Revert "lock mask"

This reverts commit 3fd528c9d5d5b9c05dc1c697e61570b81811fb95.


  Commit: de7c01fe255e822603577a9f3f6fd588b0aa8a89
      
https://github.com/Perl/perl5/commit/de7c01fe255e822603577a9f3f6fd588b0aa8a89
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Maybe comment'


  Commit: 9f4653f8a8a5f41a15a0319ecbb7508e0565c52a
      
https://github.com/Perl/perl5/commit/9f4653f8a8a5f41a15a0319ecbb7508e0565c52a
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  emul assertion


  Commit: 26547c07f2df909b189760aaa1975b0fdf98a88c
      
https://github.com/Perl/perl5/commit/26547c07f2df909b189760aaa1975b0fdf98a88c
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c
    M makedef.pl

  Log Message:
  -----------
  Experimentally enable per-thread locale emulation

This is set to end in 5.39.10, but will give us field experience in the
meantime.


  Commit: ebcb48e09a82758934bbf8c39fe79fc94531ab4b
      
https://github.com/Perl/perl5/commit/ebcb48e09a82758934bbf8c39fe79fc94531ab4b
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M makedef.pl
    M perl.h

  Log Message:
  -----------
  Don't do thread-safe locales emulation on mingw

MingW when compiled with the Universal C runtime (UCRT) is thread-safe
with respect to locales, just as VS 2015 and later MSVCRT compilations
are.

However, versions not using UCRT cannot be compiled to emulate
thread-safe locale.  I'm pretty sure this is due to a bug in the libc
strftime() function, having spent a bunch of hours working on this.

It often fails lib/locale_threads.t when using the emulation, but not
always.  The failure is always in strftime().

What made me think it could be perl is another characteristic of the
failures.  lib/locale_threads.t works by, in each thread, setting each
available locale category to a locale, different from any other category
in that thread, and as different as possible from the locale for the
corresponding category in any other thread.  For example thread 0 might
have LC_CTYPE set to locale X, LC_NUMERIC to Y, LC_TIME to Z, etc.
Thread 1 would use a locale for LC_CTYPE, as different from X as
possible, meaning executing the same operation on thread 0 and thread 1
would yield different expected results.  (It goes to some lengths to
calculate the biggest distance in the results.)  Similarly LC_NUMERIC
would have something almost completely different from Y; and so on.

Then each thread executes a batch of iterations.  Each iteration runs
all the operations I could find that perl uses that apply to LC_TYPE,
and all the ones that apply to each of the other categories.  And
verifies that all the results are as expected.

Simultaneously, the other threads are executing their batch.  It is
verifying that there is no bleed-through from one thread to another.  If
the threads all have the same results as the other threads, we couldn't
detect if there is real bleed-through or not.  This is solved by making
the results for each category as different as possible from any other
thread currently executing.

However, this isn't good enough.  Every so many iterations, each thread
changes to use a new set of locales.  This verifies that the locales can
be changed in a thread without that bleeding through to other threads.

And thread 0 is special.  It harvests the other threads as they finish,
and keeps going for a while.  This is to catch bugs in thread
completion, of which we've had a few.

MingW's failures all occur, when they occur, on the first iteration
following a switch to a new set of locales.  That is suspiciously like
it is a race condition in cleaning up from the previous setting.  But it
isn't the first test of the set of the first iteration of the next set.
It can be the 10th or so test.  I added enough debugging statements to
convince me that it isn't perl.

This is the failing code in locale.c:

        STRFTIME_LOCK;
        int len = strftime(buf, bufsize, fmt, mytm);
        STRFTIME_UNLOCK;

The returned 'buf' is not always correct.
T
The LOCK/UNLOCK macros on MingW with thread-safe emulation enabled, call
EnterCriticalSection(), and set the locales for the categories that
affect strftime() to the proper locale.  Just to be sure. I tested
setting LC_ALL to the correct value.  While in its uninterruptible (by
other locale handling code anyway) section, strftime() fills buf with
the result for the current locale (which STRFTIME_LOCK has set).

I added print statements within the critical section thusly

        STRFTIME_LOCK;
        DEBUG_U(PerlIO_printf(Perl_debug_log,
                              "calling strftime(%s), LC_ALL=%s\n",
                              fmt, setlocale(LC_ALL, NULL)));
        int len = strftime(buf, bufsize, fmt, mytm);
        DEBUG_U(PerlIO_printf(Perl_debug_log,
                              "return=%s, LC_ALL=%s\n",
                              buf, setlocale(LC_ALL, NULL)));
        STRFTIME_UNLOCK;

On this platform, setlocale() expands to _wsetlocale(), a Windows libc
call.

Here's what they showed for one failure.

        calling strftime(%b), LC_ALL=Hungarian_Hungary.1250
        return=marc., LC_ALL=Hungarian_Hungary.1250

The 'a' in the Hungarian for March is supposed to be a U+00E1, with an
acute accent, so this is wrong.

strftime() also is passed a pointer to a struct tm, which is filled in
with various integers which indicate in this case which month the %b is
supposed to return.  That it is returning something very much like márch
indicates those integers are correct.

Not shown in the example above are the other prints I added to verify
that we are indeed in a critical section.  I didn't see a way to
actually test for this via a libc call, but one could use strace and
wade through the output.  But there are print statements that print out
immediately before entering a critical section, and immediately after
leaving it.  I verified that those prints indicate this code is in a
critical section.

I note that this box has actually not very many locales, so that the
distance between the results of various threads isn't all that large.
Pretty much all the locales are CP 1250, 1251, 1252, and 1257, and no
UTF-8 ones, so all locales are single byte.  None of them map \XE1 into
plain 'a', which is what we are seeing returned, so the cleanup theory
seems wrong.  Sometimes the return is '?' or a series of them,
indicating that the returned character is mojibake.

None of the locales I saw had 'marc\.' as a possible return.  It appears
only here in the entire trace of all threads.  This makes it again less
likely that it is a cleanup issue.  But where did it come from?.  I
don't know.  The value for the C locale is 'Mar', so it didn't come from
there.

The localeconv() function is also broken in this Configuration.  We long
ago figured out a workaround for that.  I tried that same workaround for
strftime(), and it didn't help.


  Commit: de09f1d8ad2af14cd615895b708f980cd3711c14
      
https://github.com/Perl/perl5/commit/de09f1d8ad2af14cd615895b708f980cd3711c14
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M makedef.pl
    M perl.h

  Log Message:
  -----------
  Revert "Don't do thread-safe locales emulation on mingw"

This reverts commit 4e4dfa1146e1f389110d001587ccb0fadec4323b.


  Commit: a3579bc76e0cf5188378572808fcdd915eceacc7
      
https://github.com/Perl/perl5/commit/a3579bc76e0cf5188378572808fcdd915eceacc7
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  XXX perl.h maybe drop


  Commit: 409da0842eea2adc74b11db26bf2d18cd4d8626c
      
https://github.com/Perl/perl5/commit/409da0842eea2adc74b11db26bf2d18cd4d8626c
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M makedef.pl

  Log Message:
  -----------
  makedef.pl: PL_cur_locale_obj is only POSIX 2008 multiplicity


  Commit: 92209bd69965c8c31bcc70f9cf4e38a5e713e5b4
      
https://github.com/Perl/perl5/commit/92209bd69965c8c31bcc70f9cf4e38a5e713e5b4
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale_threads.t

  Log Message:
  -----------
  locale_threads.t: Better handle weird locales

The previous code was generating bunches of uninitialized variable
warnings, due to 1) not checking for definedness early; 2) the loop
termination needs to be reevaluated each time because there is a
potential splice, shortening the array.

This only happens, I believe, on MingW not using UCRT.


  Commit: 86f67b6e0bf86b0efbae88d642e595a21d6d4f57
      
https://github.com/Perl/perl5/commit/86f67b6e0bf86b0efbae88d642e595a21d6d4f57
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M lib/locale_threads.t

  Log Message:
  -----------
  Revert "locale_threads.t: Skip on OpenBSD and DragonFly threaded builds"

This reverts commit 1d74e8214dd53cf0fa9e8c5aab3e6187685eadcd, as they
have been modified


  Commit: dd2a41724ce1c10aa4a2f794ce1a3ccc4edb905d
      
https://github.com/Perl/perl5/commit/dd2a41724ce1c10aa4a2f794ce1a3ccc4edb905d
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Debug uselocale


  Commit: 6762887f8372954044e1df0a18174557209e712b
      
https://github.com/Perl/perl5/commit/6762887f8372954044e1df0a18174557209e712b
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M pp.c

  Log Message:
  -----------
  pp_study: hook


  Commit: 930b53c0b77dc3cc2f2673be83d2f2c0ac03b10e
      
https://github.com/Perl/perl5/commit/930b53c0b77dc3cc2f2673be83d2f2c0ac03b10e
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M sv.c

  Log Message:
  -----------
  sv.c need to check for pv in sv in sv_setpvf


  Commit: 527fbfe53847234caa823501ae40b67ac04774fc
      
https://github.com/Perl/perl5/commit/527fbfe53847234caa823501ae40b67ac04774fc
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  XXXExperimental: use just one of mktime, minimktime


  Commit: 168db8467fbd06b73c3e6ccbacd7973935fc78fe
      
https://github.com/Perl/perl5/commit/168db8467fbd06b73c3e6ccbacd7973935fc78fe
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Revert "XXXExperimental: use just one of mktime, minimktime"

This reverts commit d57565d5719746a0a3873db4bb47f4a5407bf65a.


  Commit: e31df748f9e2ce0a93e34ed6f7ef52fe072b2737
      
https://github.com/Perl/perl5/commit/e31df748f9e2ce0a93e34ed6f7ef52fe072b2737
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M hv.c
    M locale.c
    M perl.h
    M sv.c

  Log Message:
  -----------
  final


  Commit: 04414320933588a676138a7b7b3caefb0f992186
      
https://github.com/Perl/perl5/commit/04414320933588a676138a7b7b3caefb0f992186
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M sv_inline.h

  Log Message:
  -----------
  Add comment to sv_setpv_freshbuf


Compare: https://github.com/Perl/perl5/compare/4c12ea854d7d...044143209335

Reply via email to