diff options
| author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-26 10:12:08 +0000 |
|---|---|---|
| committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-26 10:12:08 +0000 |
| commit | 5c758b8341b16fd0a1473be817e40c29f8906840 (patch) | |
| tree | 110bbbb31639b9fd945721ee33931e8b8e13ef2c /libstdc++-v3/include/std/mutex | |
| parent | b099e703ba03650a18a79097b95cf2a1a0a9ffcb (diff) | |
| download | ppe42-gcc-5c758b8341b16fd0a1473be817e40c29f8906840.tar.gz ppe42-gcc-5c758b8341b16fd0a1473be817e40c29f8906840.zip | |
2009-04-26 Paolo Carlini <paolo.carlini@oracle.com>
Revert the last commit.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146796 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/std/mutex')
| -rw-r--r-- | libstdc++-v3/include/std/mutex | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/libstdc++-v3/include/std/mutex b/libstdc++-v3/include/std/mutex index 3a22aabcad1..f26acc02f4f 100644 --- a/libstdc++-v3/include/std/mutex +++ b/libstdc++-v3/include/std/mutex @@ -728,10 +728,9 @@ namespace std } #else extern function<void()> __once_functor; - extern unique_lock<mutex>* __once_functor_lock; - extern mutex& - __get_once_mutex(); + extern unique_lock<mutex>& + __get_once_functor_lock(); #endif extern "C" void __once_proxy(); @@ -746,13 +745,18 @@ namespace std __once_callable = &__bound_functor; __once_call = &__once_call_impl<decltype(__bound_functor)>; #else - unique_lock<mutex> __functor_lock(__get_once_mutex()); + unique_lock<mutex>& __functor_lock = __get_once_functor_lock(); + __functor_lock.lock(); __once_functor = bind(__f, __args...); - __once_functor_lock = &__functor_lock; #endif int __e = __gthread_once(&(__once._M_once), &__once_proxy); +#ifndef _GLIBCXX_HAVE_TLS + if (__functor_lock) + __functor_lock.unlock(); +#endif + if (__e) __throw_system_error(__e); } |

