summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3/include/std/mutex
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-26 10:12:08 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-26 10:12:08 +0000
commit5c758b8341b16fd0a1473be817e40c29f8906840 (patch)
tree110bbbb31639b9fd945721ee33931e8b8e13ef2c /libstdc++-v3/include/std/mutex
parentb099e703ba03650a18a79097b95cf2a1a0a9ffcb (diff)
downloadppe42-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/mutex14
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);
}
OpenPOWER on IntegriCloud