From 0d7d69ca4a8c05d883e07ee42058c9c6b0c72370 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 27 Nov 2020 11:00:15 +0000 Subject: [PATCH] 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. --- libstdc++-v3/src/c++98/locale.cc | 2 +- libstdc++-v3/src/c++98/locale_init.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/src/c++98/locale.cc b/libstdc++-v3/src/c++98/locale.cc index 9b3fc351515..4c1612cc5dc 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 fc8416ba01a..c3841ccbd3c 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) -- 2.30.2