Branch: refs/heads/smoke-me/khw-env
  Home:   https://github.com/Perl/perl5
  Commit: d90be81df55f09d37b1fbee89abf7a002dcf8439
      
https://github.com/Perl/perl5/commit/d90be81df55f09d37b1fbee89abf7a002dcf8439
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: d0ca397bafbf0a8db0847118e90da523f5aca6f3
      
https://github.com/Perl/perl5/commit/d0ca397bafbf0a8db0847118e90da523f5aca6f3
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 511ff485ef0111ea3d06c2911ed93fee4737510d
      
https://github.com/Perl/perl5/commit/511ff485ef0111ea3d06c2911ed93fee4737510d
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: 0c67280e15e6d7d3d5d3cc0de3fe1448adb33e88
      
https://github.com/Perl/perl5/commit/0c67280e15e6d7d3d5d3cc0de3fe1448adb33e88
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/harness

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


  Commit: 724021e7b01f99c1bd9c5b14818b45bc857ba4f7
      
https://github.com/Perl/perl5/commit/724021e7b01f99c1bd9c5b14818b45bc857ba4f7
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/harness

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


  Commit: b15549344a9b5a88a37803e63d47dbb637b2b904
      
https://github.com/Perl/perl5/commit/b15549344a9b5a88a37803e63d47dbb637b2b904
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/porting/bincompat.t

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


  Commit: 198b00cb32b89aa6081f11cd74bcba18865f2050
      
https://github.com/Perl/perl5/commit/198b00cb32b89aa6081f11cd74bcba18865f2050
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/TEST

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


  Commit: 430f815ab6a2f55df1069264eec4932e2ec04f63
      
https://github.com/Perl/perl5/commit/430f815ab6a2f55df1069264eec4932e2ec04f63
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/TEST

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


  Commit: ea5a6b829fc003b24afddf3bc39a7a42016a42eb
      
https://github.com/Perl/perl5/commit/ea5a6b829fc003b24afddf3bc39a7a42016a42eb
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: 4f7e772c0a508abdbdc66b1a89cd818c176c8093
      
https://github.com/Perl/perl5/commit/4f7e772c0a508abdbdc66b1a89cd818c176c8093
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/porting/cmp_version.t

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


  Commit: 79e9658d58cc127a81aa15eba8917263e9911f57
      
https://github.com/Perl/perl5/commit/79e9658d58cc127a81aa15eba8917263e9911f57
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 3884aef80df297ee135ba91e8a200b76bea1c15a
      
https://github.com/Perl/perl5/commit/3884aef80df297ee135ba91e8a200b76bea1c15a
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: 238a2d0b5478c280234728a931918192a970b5aa
      
https://github.com/Perl/perl5/commit/238a2d0b5478c280234728a931918192a970b5aa
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 5ed8fdde15df9a0f0945ca34fa335a6c7183165a
      
https://github.com/Perl/perl5/commit/5ed8fdde15df9a0f0945ca34fa335a6c7183165a
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/run/locale.t

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


  Commit: 8b91cc6609815b7d4e28e22fb8773c813cd8bf8b
      
https://github.com/Perl/perl5/commit/8b91cc6609815b7d4e28e22fb8773c813cd8bf8b
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: bed049e09aa0d441679d4173ae0b19a738d99fd1
      
https://github.com/Perl/perl5/commit/bed049e09aa0d441679d4173ae0b19a738d99fd1
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M perl.h

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


  Commit: fa8b5813f06f04fab799cf62b16839765680ec04
      
https://github.com/Perl/perl5/commit/fa8b5813f06f04fab799cf62b16839765680ec04
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/run/locale.t

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


  Commit: 91dc66c5e2ba12871535e6cabd91d65c5df6b196
      
https://github.com/Perl/perl5/commit/91dc66c5e2ba12871535e6cabd91d65c5df6b196
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 101df4cf99a0b7d05d12a6a69def30d7ba8e16df
      
https://github.com/Perl/perl5/commit/101df4cf99a0b7d05d12a6a69def30d7ba8e16df
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/porting/cmp_version.t

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


  Commit: a6fa31fd886424a5aae8596c237e0d8d4a51c375
      
https://github.com/Perl/perl5/commit/a6fa31fd886424a5aae8596c237e0d8d4a51c375
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: faf90299c8b82737421c0f38d062e7af369a26db
      
https://github.com/Perl/perl5/commit/faf90299c8b82737421c0f38d062e7af369a26db
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M makedef.pl
    M perl.h

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


  Commit: 7a9daa39189b34f70547b54860113daebe31ec05
      
https://github.com/Perl/perl5/commit/7a9daa39189b34f70547b54860113daebe31ec05
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M perl.h

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


  Commit: 29e4ab775efb10696ae5c02ecacbd7267c786374
      
https://github.com/Perl/perl5/commit/29e4ab775efb10696ae5c02ecacbd7267c786374
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: b176f3cc5971b100b9ffbe9ad748e75d5b24a9f7
      
https://github.com/Perl/perl5/commit/b176f3cc5971b100b9ffbe9ad748e75d5b24a9f7
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 2546a07703edcc1ec5e8d960fb704729513a4fa5
      
https://github.com/Perl/perl5/commit/2546a07703edcc1ec5e8d960fb704729513a4fa5
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: f94a53ae467f0eb74592541c9c62cd491a140a4e
      
https://github.com/Perl/perl5/commit/f94a53ae467f0eb74592541c9c62cd491a140a4e
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 34e263d8bb7b30ddec748d0c8c353bfffbdd4cb6
      
https://github.com/Perl/perl5/commit/34e263d8bb7b30ddec748d0c8c353bfffbdd4cb6
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: e44dec0c1831bd9ad9796145230c9229db0b0433
      
https://github.com/Perl/perl5/commit/e44dec0c1831bd9ad9796145230c9229db0b0433
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: 5d146958a7596ada8dfbb9b1b54351bf82bad68b
      
https://github.com/Perl/perl5/commit/5d146958a7596ada8dfbb9b1b54351bf82bad68b
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M dist/threads/threads.xs

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


  Commit: 2f8517353cce24e46f668477d64d6aa85c1315b0
      
https://github.com/Perl/perl5/commit/2f8517353cce24e46f668477d64d6aa85c1315b0
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M lib/locale.t

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


  Commit: 17a8903f797fedb3230b7d2fc2532e4525b18e36
      
https://github.com/Perl/perl5/commit/17a8903f797fedb3230b7d2fc2532e4525b18e36
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M lib/locale.t

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


  Commit: bec79d0b92be006901b35c8e59225580e4a20270
      
https://github.com/Perl/perl5/commit/bec79d0b92be006901b35c8e59225580e4a20270
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M lib/locale.t

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


  Commit: 1b9303610b62bc32d3efed633ec8dcc6d5b30b77
      
https://github.com/Perl/perl5/commit/1b9303610b62bc32d3efed633ec8dcc6d5b30b77
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M perl.h

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


  Commit: c50dba76643e5825f9140313f044a3b4262a6e63
      
https://github.com/Perl/perl5/commit/c50dba76643e5825f9140313f044a3b4262a6e63
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 8f64737b65c6804e50645c045b1c8cf52138ec17
      
https://github.com/Perl/perl5/commit/8f64737b65c6804e50645c045b1c8cf52138ec17
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: 1f12ea5b4042256101db63936619c1d451556499
      
https://github.com/Perl/perl5/commit/1f12ea5b4042256101db63936619c1d451556499
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/porting/customized.dat

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


  Commit: a96921c3b360d086c5f586c68807d390d9abaa82
      
https://github.com/Perl/perl5/commit/a96921c3b360d086c5f586c68807d390d9abaa82
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: ebd3cafa705d4fbb88f23630584683af182dab4d
      
https://github.com/Perl/perl5/commit/ebd3cafa705d4fbb88f23630584683af182dab4d
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/loc_tools.pl

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


  Commit: df5de680be844d3405dbccee6b275d69642d15e6
      
https://github.com/Perl/perl5/commit/df5de680be844d3405dbccee6b275d69642d15e6
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M locale.c

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


  Commit: 83e6f3e7ad2bc6f35e245243994f920f013a8868
      
https://github.com/Perl/perl5/commit/83e6f3e7ad2bc6f35e245243994f920f013a8868
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M locale.c

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


  Commit: 1520c15ef788f21b5c168786b6cd476e38584c0a
      
https://github.com/Perl/perl5/commit/1520c15ef788f21b5c168786b6cd476e38584c0a
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M locale.c

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


  Commit: 2e58c00f5b81ecaea30ef1b019ec8149aec752f0
      
https://github.com/Perl/perl5/commit/2e58c00f5b81ecaea30ef1b019ec8149aec752f0
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M hints/darwin.sh

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


  Commit: 0700824abaa87952c07b922d00997944e1fbf9d8
      
https://github.com/Perl/perl5/commit/0700824abaa87952c07b922d00997944e1fbf9d8
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M pp.c

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


  Commit: 1d6def17b7026c4265613c4ad1504f2253aaba89
      
https://github.com/Perl/perl5/commit/1d6def17b7026c4265613c4ad1504f2253aaba89
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M pp.c

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


  Commit: e4f828dbd16b06073220d8906c7d6bef87b7e404
      
https://github.com/Perl/perl5/commit/e4f828dbd16b06073220d8906c7d6bef87b7e404
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M hints/darwin.sh

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


  Commit: 663997fda2bac0d9ed56c15b6567c51d666b2ac8
      
https://github.com/Perl/perl5/commit/663997fda2bac0d9ed56c15b6567c51d666b2ac8
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 91ce51dbb8469e0b8dab2ea61a38b596550d4332
      
https://github.com/Perl/perl5/commit/91ce51dbb8469e0b8dab2ea61a38b596550d4332
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/run/locale.t

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


  Commit: 11190e603677cd57e12730391ad95147f4645390
      
https://github.com/Perl/perl5/commit/11190e603677cd57e12730391ad95147f4645390
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M lib/locale_threads.t

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


  Commit: caa58df6d1e88acb20c5b6bc8d89f6b856bf5e8d
      
https://github.com/Perl/perl5/commit/caa58df6d1e88acb20c5b6bc8d89f6b856bf5e8d
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M lib/locale_threads.t

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


  Commit: ffd7ac717225f128d5083f1cbe657c62ff820def
      
https://github.com/Perl/perl5/commit/ffd7ac717225f128d5083f1cbe657c62ff820def
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: 68bdc87857bba4e36993e076aa0f388feb8c1623
      
https://github.com/Perl/perl5/commit/68bdc87857bba4e36993e076aa0f388feb8c1623
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: bcfbe7ff505594e730aadca7d51a7de7a9646e01
      
https://github.com/Perl/perl5/commit/bcfbe7ff505594e730aadca7d51a7de7a9646e01
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 3541c7834ceabb8d09f1a0e46bdab3d2658ba867
      
https://github.com/Perl/perl5/commit/3541c7834ceabb8d09f1a0e46bdab3d2658ba867
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: af4ad958e1b18d8fad6d0725702e0862f6ac093e
      
https://github.com/Perl/perl5/commit/af4ad958e1b18d8fad6d0725702e0862f6ac093e
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M thread.h

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

Indent some nested preproccessor defines


  Commit: 5dfdaa9a96f251a2e3ffd804e3905ce9ba0081cc
      
https://github.com/Perl/perl5/commit/5dfdaa9a96f251a2e3ffd804e3905ce9ba0081cc
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: b09aa79f2a674e79dd2687172109529c1cf1bcb8
      
https://github.com/Perl/perl5/commit/b09aa79f2a674e79dd2687172109529c1cf1bcb8
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: 543eff82cb953a7ee14e2eff5274a7a851285c92
      
https://github.com/Perl/perl5/commit/543eff82cb953a7ee14e2eff5274a7a851285c92
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: 357cf5a1e125549d3a4e2903cf62ad8aa092b2ac
      
https://github.com/Perl/perl5/commit/357cf5a1e125549d3a4e2903cf62ad8aa092b2ac
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: 478518de8fc2c644f0e8defbf1d8659b250523a9
      
https://github.com/Perl/perl5/commit/478518de8fc2c644f0e8defbf1d8659b250523a9
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M util.c

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


  Commit: 466c6e07eb49564f92f783c25267f0b92e384d85
      
https://github.com/Perl/perl5/commit/466c6e07eb49564f92f783c25267f0b92e384d85
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M locale.c

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


  Commit: 82b3c6963f2446613bc9badb19026dc4d59007b8
      
https://github.com/Perl/perl5/commit/82b3c6963f2446613bc9badb19026dc4d59007b8
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M pod/perlhacktips.pod

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


  Commit: df3b488edce87d4e2e03be495a2d99064f48ebc1
      
https://github.com/Perl/perl5/commit/df3b488edce87d4e2e03be495a2d99064f48ebc1
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M iperlsys.h

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


  Commit: 3495c78672162a8cbb3fa65cb47aa63d7915b8c1
      
https://github.com/Perl/perl5/commit/3495c78672162a8cbb3fa65cb47aa63d7915b8c1
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M regen/reentr.pl

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


  Commit: 046454f5f7adbb68297ea517ecd3c642539fa4e3
      
https://github.com/Perl/perl5/commit/046454f5f7adbb68297ea517ecd3c642539fa4e3
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: cb8817bd9d67d98568f8e22bbe52504ae140a633
      
https://github.com/Perl/perl5/commit/cb8817bd9d67d98568f8e22bbe52504ae140a633
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M pod/perlmod.pod

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


  Commit: fbfa4a82d823fcd38987adc275117422b96030d5
      
https://github.com/Perl/perl5/commit/fbfa4a82d823fcd38987adc275117422b96030d5
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M pod/perllocale.pod

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


  Commit: dd0b6ba79c91c6b6d5749fb1362a891e2c6224d3
      
https://github.com/Perl/perl5/commit/dd0b6ba79c91c6b6d5749fb1362a891e2c6224d3
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: 35bf1d8ac749209e9834da2e668314c63481ff52
      
https://github.com/Perl/perl5/commit/35bf1d8ac749209e9834da2e668314c63481ff52
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/run/locale.t

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


  Commit: 9a0f72f7e67be4b40f2e251c1aee4ca721cc9987
      
https://github.com/Perl/perl5/commit/9a0f72f7e67be4b40f2e251c1aee4ca721cc9987
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M pod/perlembed.pod

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


  Commit: 3721ddd498c65b687c6001c7c5437680431c1163
      
https://github.com/Perl/perl5/commit/3721ddd498c65b687c6001c7c5437680431c1163
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 878252d49c47d93a259415dcfff24d442b1c64f9
      
https://github.com/Perl/perl5/commit/878252d49c47d93a259415dcfff24d442b1c64f9
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M lib/locale_threads.t

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


  Commit: bb1ea86729bc0532508a2b6ca6012ba58551be12
      
https://github.com/Perl/perl5/commit/bb1ea86729bc0532508a2b6ca6012ba58551be12
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M lib/locale_threads.t

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

This reverts commit a7a8dea3aabb81a05aacaf3a26c49854a5854111.


  Commit: f3dc8a8051be29f676420dbb058da09171c770fb
      
https://github.com/Perl/perl5/commit/f3dc8a8051be29f676420dbb058da09171c770fb
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 809a71a5bd641e38046f25cb3a91c1bca4cc2279
      
https://github.com/Perl/perl5/commit/809a71a5bd641e38046f25cb3a91c1bca4cc2279
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 5c5d731f0b9b2272a23405222c23e355717d12b7
      
https://github.com/Perl/perl5/commit/5c5d731f0b9b2272a23405222c23e355717d12b7
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 95209af957a3b1d6d6cc9b645667a2760dc7e4d5
      
https://github.com/Perl/perl5/commit/95209af957a3b1d6d6cc9b645667a2760dc7e4d5
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 8b9a10856769eee47f13d3eb7bde8b2f2e312230
      
https://github.com/Perl/perl5/commit/8b9a10856769eee47f13d3eb7bde8b2f2e312230
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 8be219448b5daa61c8ac11cb1be643d88be722dc
      
https://github.com/Perl/perl5/commit/8be219448b5daa61c8ac11cb1be643d88be722dc
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M locale.c

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


  Commit: 80e8b725c395cd03d214b2d1feba85fffa87ee26
      
https://github.com/Perl/perl5/commit/80e8b725c395cd03d214b2d1feba85fffa87ee26
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: f98776a83a3729441ff4092a67ca85d9e7f652cd
      
https://github.com/Perl/perl5/commit/f98776a83a3729441ff4092a67ca85d9e7f652cd
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M locale.c

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


  Commit: 01be3c6c5764bf60af3394e4bfa9847fa6e98717
      
https://github.com/Perl/perl5/commit/01be3c6c5764bf60af3394e4bfa9847fa6e98717
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: e775bbe5870f18f780230d49c4a4ff8cdc641660
      
https://github.com/Perl/perl5/commit/e775bbe5870f18f780230d49c4a4ff8cdc641660
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M t/loc_tools.pl

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


  Commit: 61965cd6c820073d4e2b20586eb068dacfe0b879
      
https://github.com/Perl/perl5/commit/61965cd6c820073d4e2b20586eb068dacfe0b879
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M lib/locale.t

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


  Commit: 27b8ca8832d441068381fbcc43f2190b5f8dd4b0
      
https://github.com/Perl/perl5/commit/27b8ca8832d441068381fbcc43f2190b5f8dd4b0
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 5d4bd9a5877bc864099f6f5941419e1d7de48d54
      
https://github.com/Perl/perl5/commit/5d4bd9a5877bc864099f6f5941419e1d7de48d54
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 518c02a2b17da503e72760f046c632b82b73779b
      
https://github.com/Perl/perl5/commit/518c02a2b17da503e72760f046c632b82b73779b
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M locale.c

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


  Commit: 4f5a4b7f453d2557d1bfddf3f4d4b465fb5ad48a
      
https://github.com/Perl/perl5/commit/4f5a4b7f453d2557d1bfddf3f4d4b465fb5ad48a
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M locale.c

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


  Commit: 03853ff738862359c1d30bf941f352d9085b2230
      
https://github.com/Perl/perl5/commit/03853ff738862359c1d30bf941f352d9085b2230
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 27e667f631ab0fbf865258278037fa458f48d922
      
https://github.com/Perl/perl5/commit/27e667f631ab0fbf865258278037fa458f48d922
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: fdd1fe65526302ad0ee3ec8d97bfa8d9f5f3281d
      
https://github.com/Perl/perl5/commit/fdd1fe65526302ad0ee3ec8d97bfa8d9f5f3281d
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: 733560df58d65d7d75bbfed115c1206db9c428a1
      
https://github.com/Perl/perl5/commit/733560df58d65d7d75bbfed115c1206db9c428a1
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 701cb5a876e445cfcaba05d379726b0eb943ddf0
      
https://github.com/Perl/perl5/commit/701cb5a876e445cfcaba05d379726b0eb943ddf0
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M locale.c

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


  Commit: 5e78b3a5ca961a5078948bfcd9f006783b3d6255
      
https://github.com/Perl/perl5/commit/5e78b3a5ca961a5078948bfcd9f006783b3d6255
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M dist/threads/threads.xs

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


  Commit: b28ef230156fae584807e56053009948f31e04ad
      
https://github.com/Perl/perl5/commit/b28ef230156fae584807e56053009948f31e04ad
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 8805ecf60c623279e0d352483935c593e6af3018
      
https://github.com/Perl/perl5/commit/8805ecf60c623279e0d352483935c593e6af3018
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

  Changed paths:
    M lib/locale_threads.t

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


  Commit: 0d1298474890598451518184746ccda8743e8d91
      
https://github.com/Perl/perl5/commit/0d1298474890598451518184746ccda8743e8d91
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 57edaa8f8ee28022a0e76fcfba2f3b59843a9da1
      
https://github.com/Perl/perl5/commit/57edaa8f8ee28022a0e76fcfba2f3b59843a9da1
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: f64afe178f0e65db113e539181af061741023c94
      
https://github.com/Perl/perl5/commit/f64afe178f0e65db113e539181af061741023c94
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 2024)

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

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


  Commit: f83cae869e932e32ed1a42096c9878d0fe2d8393
      
https://github.com/Perl/perl5/commit/f83cae869e932e32ed1a42096c9878d0fe2d8393
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 1a545f7d239618d6b24246e4b58a88c7b8101bd0
      
https://github.com/Perl/perl5/commit/1a545f7d239618d6b24246e4b58a88c7b8101bd0
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 83a55a168ae444fab4e982e4b3ab8e0a926bc482
      
https://github.com/Perl/perl5/commit/83a55a168ae444fab4e982e4b3ab8e0a926bc482
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 4fc680fabad7b0a6a112eb41d239ead2efe1c56d
      
https://github.com/Perl/perl5/commit/4fc680fabad7b0a6a112eb41d239ead2efe1c56d
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 67231e711a1b3dbf357f6d828ab2a4889393278c
      
https://github.com/Perl/perl5/commit/67231e711a1b3dbf357f6d828ab2a4889393278c
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 7cdf2e8a1cf66b506e39cdb0a21fb69c448f2965
      
https://github.com/Perl/perl5/commit/7cdf2e8a1cf66b506e39cdb0a21fb69c448f2965
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 211e9dc1945d215e52dbcffa3d46815d20f6f531
      
https://github.com/Perl/perl5/commit/211e9dc1945d215e52dbcffa3d46815d20f6f531
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 89c4073071ad8669678f2d6267a0cda88ec61251
      
https://github.com/Perl/perl5/commit/89c4073071ad8669678f2d6267a0cda88ec61251
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 88fb63cc9fd00db4b5f3efe6616af9f64808033f
      
https://github.com/Perl/perl5/commit/88fb63cc9fd00db4b5f3efe6616af9f64808033f
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: a4be0e8700c52bc8feaa93809145d05ce46e1503
      
https://github.com/Perl/perl5/commit/a4be0e8700c52bc8feaa93809145d05ce46e1503
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-01-31 (Wed, 31 Jan 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: 9fc785b4b0dcb35cb45803354883fc2939d47a25
      
https://github.com/Perl/perl5/commit/9fc785b4b0dcb35cb45803354883fc2939d47a25
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 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: 64301c79165ae854f46a575394359da57c6ce067
      
https://github.com/Perl/perl5/commit/64301c79165ae854f46a575394359da57c6ce067
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 Feb 2024)

  Changed paths:
    M locale.c

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


  Commit: ca097509ba331161c98374dc6eba91445a448677
      
https://github.com/Perl/perl5/commit/ca097509ba331161c98374dc6eba91445a448677
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 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: 7247743124cf79837d0da5f8ffd0ccee9f5b4bd1
      
https://github.com/Perl/perl5/commit/7247743124cf79837d0da5f8ffd0ccee9f5b4bd1
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 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: 7c417a907b1a2931400e9b269f68b3b7aee30e5c
      
https://github.com/Perl/perl5/commit/7c417a907b1a2931400e9b269f68b3b7aee30e5c
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 Feb 2024)

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

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


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

  Changed paths:
    M locale.c

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


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

  Changed paths:
    M locale.c

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


  Commit: ab61b675c56be86badc156155d435b91c46273e9
      
https://github.com/Perl/perl5/commit/ab61b675c56be86badc156155d435b91c46273e9
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 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: 4bd6ed271c4102427c90da0e8552bcdf555e0546
      
https://github.com/Perl/perl5/commit/4bd6ed271c4102427c90da0e8552bcdf555e0546
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 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: a977eb64d06bcef59f6fd34e4f07fecdb732d654
      
https://github.com/Perl/perl5/commit/a977eb64d06bcef59f6fd34e4f07fecdb732d654
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 Feb 2024)

  Changed paths:
    M locale.c

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

Maybe use C in the callers


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

  Changed paths:
    M locale.c

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

This reverts commit b6ea27aa76a1c8785e84df9a1a42f1a71dcc81e2.


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

  Changed paths:
    M locale.c

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


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

  Changed paths:
    M perl.h

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


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

  Changed paths:
    M perl.h

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


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

  Changed paths:
    M locale.c

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


  Commit: 6afb2a500ad378ab2ce06f4ec88f17b3850e319c
      
https://github.com/Perl/perl5/commit/6afb2a500ad378ab2ce06f4ec88f17b3850e319c
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 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: ef4a16c5ac5f497a5cd20f31e4d52c50aac5b546
      
https://github.com/Perl/perl5/commit/ef4a16c5ac5f497a5cd20f31e4d52c50aac5b546
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 Feb 2024)

  Changed paths:
    M locale.c

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


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

  Changed paths:
    M locale.c

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


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

  Changed paths:
    M locale.c

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


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

  Changed paths:
    M locale.c

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


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

  Changed paths:
    M locale.c

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


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

  Changed paths:
    M locale.c

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


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

  Changed paths:
    M locale.c

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


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

  Changed paths:
    M locale.c

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


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

  Changed paths:
    M locale.c

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

This reverts commit 3fd528c9d5d5b9c05dc1c697e61570b81811fb95.


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

  Changed paths:
    M locale.c

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

This reverts commit acaff35d7ed83830fb36c149aafede5cdf400061.


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

  Changed paths:
    M locale.c

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

This reverts commit 4733a1674423ee47b33eb0ee1882e1bf39faa1a6.


  Commit: 8e2dfee67d7711d714fae9c4a7b98de8d68e40b5
      
https://github.com/Perl/perl5/commit/8e2dfee67d7711d714fae9c4a7b98de8d68e40b5
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 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: e2aa4331f7f964db1ecf42eb30efa88df16bdea1
      
https://github.com/Perl/perl5/commit/e2aa4331f7f964db1ecf42eb30efa88df16bdea1
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 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: b5d54b5420d012e27bf72e4cfd38a4023a4a36a5
      
https://github.com/Perl/perl5/commit/b5d54b5420d012e27bf72e4cfd38a4023a4a36a5
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 Feb 2024)

  Changed paths:
    M perl.h

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


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

  Changed paths:
    M makedef.pl

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


  Commit: f8a1e14a31b2600baa873b012a726e6ca32e2f6c
      
https://github.com/Perl/perl5/commit/f8a1e14a31b2600baa873b012a726e6ca32e2f6c
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 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: fdfa515c403148471b5f284918430a4b351033e0
      
https://github.com/Perl/perl5/commit/fdfa515c403148471b5f284918430a4b351033e0
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 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: 4f2653ae4ec91a8f6364a2d56fa78e13d69656a7
      
https://github.com/Perl/perl5/commit/4f2653ae4ec91a8f6364a2d56fa78e13d69656a7
  Author: Karl Williamson <k...@cpan.org>
  Date:   2024-02-01 (Thu, 01 Feb 2024)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  wrap uselocale


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

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Revert "wrap uselocale"

This reverts commit b3ad3326b431cebbfd69809ffab741e79a099898.


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

  Changed paths:
    M locale.c

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


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

  Changed paths:
    M pp.c

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


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

  Changed paths:
    M sv.c

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


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

  Changed paths:
    M locale.c

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


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

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

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


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

  Changed paths:
    M sv_inline.h

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


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

  Changed paths:
    M locale.c

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

This reverts commit d57565d5719746a0a3873db4bb47f4a5407bf65a.


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

Reply via email to