diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2020-11-27 11:00:15 +0000 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2020-11-27 12:25:02 +0000 |
commit | 0d7d69ca4a8c05d883e07ee42058c9c6b0c72370 (patch) | |
tree | 9e5c5f9cd38e1fe61cf7357362ae22b9aa8a5097 | |
parent | b6a7b72c6c91cc0d800a603a59e96fbcb07793ba (diff) | |
download | gcc-0d7d69ca4a8c05d883e07ee42058c9c6b0c72370.zip gcc-0d7d69ca4a8c05d883e07ee42058c9c6b0c72370.tar.gz gcc-0d7d69ca4a8c05d883e07ee42058c9c6b0c72370.tar.bz2 |
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.
-rw-r--r-- | libstdc++-v3/src/c++98/locale.cc | 2 | ||||
-rw-r--r-- | 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 9b3fc35..4c1612c 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 fc8416b..c3841cc 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) |