diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 59b6bffa2da4..7224004a186a 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2003-10-02 Benjamin Kosnik + + * src/locale.cc (locale::_S_initialize): Use __gthread_active_p. + (locale::facet::_S_get_c_locale): Same. + 2003-10-02 Benjamin Kosnik * config/linker-map.gnu: Export _S_get_c_locale instead of diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc index b37b30c43c26..1ba83d1ae9ba 100644 --- a/libstdc++-v3/src/locale.cc +++ b/libstdc++-v3/src/locale.cc @@ -385,11 +385,14 @@ namespace std locale::_S_initialize() { #ifdef __GTHREADS - __gthread_once(&_S_once, _S_initialize_once); -#else - if (!_S_classic) - _S_initialize_once(); + if (__gthread_active_p()) + __gthread_once(&_S_once, _S_initialize_once); + else #endif + { + if (!_S_classic) + _S_initialize_once(); + } } void @@ -472,11 +475,14 @@ namespace std locale::facet::_S_get_c_locale() { #ifdef __GHTREADS - __gthread_once(&_S_once, _S_initialize_once); -#else - if (!_S_c_locale) - _S_initialize_once(); + if (__gthread_active_p()) + __gthread_once(&_S_once, _S_initialize_once); + else #endif + { + if (!_S_c_locale) + _S_initialize_once(); + } return _S_c_locale; }