diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2009-04-26 10:12:08 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2009-04-26 10:12:08 +0000 |
commit | cca36d72b941a1d02cfbcf0eebe5113c906222f5 (patch) | |
tree | 110bbbb31639b9fd945721ee33931e8b8e13ef2c /libstdc++-v3/src | |
parent | e8f99a9d265e068c5748949970db24daf3a928b1 (diff) | |
download | gcc-cca36d72b941a1d02cfbcf0eebe5113c906222f5.zip gcc-cca36d72b941a1d02cfbcf0eebe5113c906222f5.tar.gz gcc-cca36d72b941a1d02cfbcf0eebe5113c906222f5.tar.bz2 |
2009-04-26 Paolo Carlini <paolo.carlini@oracle.com>
Revert the last commit.
From-SVN: r146796
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r-- | libstdc++-v3/src/mutex.cc | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/libstdc++-v3/src/mutex.cc b/libstdc++-v3/src/mutex.cc index a9467c2..e0a9489 100644 --- a/libstdc++-v3/src/mutex.cc +++ b/libstdc++-v3/src/mutex.cc @@ -25,6 +25,18 @@ #include <mutex> #if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) +#ifndef _GLIBCXX_HAVE_TLS +namespace +{ + std::mutex& + get_once_mutex() + { + static std::mutex once_mutex; + return once_mutex; + } +} +#endif + namespace std { const defer_lock_t defer_lock = defer_lock_t(); @@ -43,13 +55,11 @@ namespace std template class function<void()>; function<void()> __once_functor; - unique_lock<mutex>* __once_functor_lock; - - mutex& - __get_once_mutex() + unique_lock<mutex>& + __get_once_functor_lock() { - static mutex once_mutex; - return once_mutex; + static unique_lock<mutex> once_functor_lock(get_once_mutex(), defer_lock); + return once_functor_lock; } #endif @@ -59,7 +69,7 @@ namespace std { #ifndef _GLIBCXX_HAVE_TLS function<void()> __once_call = std::move(__once_functor); - __once_functor_lock->unlock(); + __get_once_functor_lock().unlock(); #endif __once_call(); } |