From: Jonathan Wakely Date: Fri, 27 Nov 2020 11:00:15 +0000 (+0000) Subject: libstdc++: Partially revert r11-5314 X-Git-Tag: basepoints/gcc-12~2762 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0d7d69ca4a8c05d883e07ee42058c9c6b0c72370;p=thirdparty%2Fgcc.git libstdc++: Partially revert r11-5314 The changes in r11-5314 are broken, because it means we don't use __gthread_once for the first few initializations, but after the program becomes multi-threaded we will repeat the initialization, using __gthread_once once this time. This leads to memory errors. The use of __is_single_threaded() in locale::id::_M_id() is OK, because the side effects are the same either way. libstdc++-v3/ChangeLog: * src/c++98/locale.cc (locale::facet::_S_get_c_locale()): Revert change to use __is_single_threaded. * src/c++98/locale_init.cc (locale::_S_initialize()): Likewise. --- diff --git a/libstdc++-v3/src/c++98/locale.cc b/libstdc++-v3/src/c++98/locale.cc index 9b3fc3515152..4c1612cc5dca 100644 --- a/libstdc++-v3/src/c++98/locale.cc +++ b/libstdc++-v3/src/c++98/locale.cc @@ -214,7 +214,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION locale::facet::_S_get_c_locale() { #ifdef __GTHREADS - if (!__gnu_cxx::__is_single_threaded()) + if (__gthread_active_p()) __gthread_once(&_S_once, _S_initialize_once); else #endif diff --git a/libstdc++-v3/src/c++98/locale_init.cc b/libstdc++-v3/src/c++98/locale_init.cc index fc8416ba01a6..c3841ccbd3c9 100644 --- a/libstdc++-v3/src/c++98/locale_init.cc +++ b/libstdc++-v3/src/c++98/locale_init.cc @@ -320,7 +320,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION locale::_S_initialize() { #ifdef __GTHREADS - if (!__gnu_cxx::__is_single_threaded()) + if (__gthread_active_p()) __gthread_once(&_S_once, _S_initialize_once); #endif if (!_S_classic)