diff options
author | Karl Williamson <khw@cpan.org> | 2019-03-27 10:28:21 -0600 |
---|---|---|
committer | Karl Williamson <khw@cpan.org> | 2019-03-27 11:13:28 -0600 |
commit | e72200e71a601e2c7882a03502d6a68aaa59985c (patch) | |
tree | 19c888001d04e210f0c14de3e3f390df6fe3be4a /perl.c | |
parent | fd8def15a58c97aa89cce8569befded97fd8c3b7 (diff) | |
download | perl-e72200e71a601e2c7882a03502d6a68aaa59985c.tar.gz |
PATCH: [perl #133959] Free BSD broken tests
Commit 70bd6bc82ba64c1d197d3ec823f43c4a454b2920 fixed a leak (likely due
to a bug in glibc) by not duplicating the C locale object. However,
that meant that there's only one copy running around. And freeing that
will cause havoc, as its supposed to be there until destruction. What
appears to be happening is that the current locale object is freed upon
thread destruction, and that could be this global one. But I don't
understand why it's only happening on Free BSD and only on this version.
But this commit fixes the problem there, and makes sense. Simply don't
free this global object upon thread destruction.
This commit also changes it so it doesn't get destroyed at destruction
time, leaving it to the final PERL_SYS_TERM to free. I'm not sure, but
I think this fixes any issues with embedded perls.
Diffstat (limited to 'perl.c')
-rw-r--r-- | perl.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -1153,7 +1153,11 @@ perl_destruct(pTHXx) /* This also makes sure we aren't using a locale object that gets freed * below */ const locale_t old_locale = uselocale(LC_GLOBAL_LOCALE); - if (old_locale != LC_GLOBAL_LOCALE) { + if ( old_locale != LC_GLOBAL_LOCALE +# ifdef USE_POSIX_2008_LOCALE + && old_locale != PL_C_locale_obj +# endif + ) { DEBUG_Lv(PerlIO_printf(Perl_debug_log, "%s:%d: Freeing %p\n", __FILE__, __LINE__, old_locale)); freelocale(old_locale); |