diff options
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/std/mutex | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc | 22 |
3 files changed, 21 insertions, 10 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 8ca5e1a..5934f9b 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2013-06-09 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/mutex (call_once): Remove parentheses to fix error in + c++1y and gnu++1y mode. + * testsuite/30_threads/mutex/try_lock/2.cc: Call try_lock() in new + thread to avoid undefined behaviour. + 2013-06-08 Ed Smith-Rowland <3dw4rd@verizon.net> Simplify and clean up library literals. diff --git a/libstdc++-v3/include/std/mutex b/libstdc++-v3/include/std/mutex index 3c666c1..cdd05a3 100644 --- a/libstdc++-v3/include/std/mutex +++ b/libstdc++-v3/include/std/mutex @@ -783,7 +783,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __set_once_functor_lock_ptr(&__functor_lock); #endif - int __e = __gthread_once(&(__once._M_once), &__once_proxy); + int __e = __gthread_once(&__once._M_once, &__once_proxy); #ifndef _GLIBCXX_HAVE_TLS if (__functor_lock) diff --git a/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc b/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc index bb3fcd4..f2a6723 100644 --- a/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc +++ b/libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc @@ -24,6 +24,7 @@ #include <mutex> +#include <thread> #include <system_error> #include <testsuite_hooks.h> @@ -38,15 +39,18 @@ int main() m.lock(); bool b; - try - { - b = m.try_lock(); - VERIFY( !b ); - } - catch (const std::system_error& e) - { - VERIFY( false ); - } + std::thread t([&] { + try + { + b = m.try_lock(); + } + catch (const std::system_error& e) + { + VERIFY( false ); + } + }); + t.join(); + VERIFY( !b ); m.unlock(); } |