Commit 28c2f60e by Jonathan Wakely Committed by Jonathan Wakely

re PR libstdc++/50862 (deadlock in std::condition_variable_any)

	PR libstdc++/50862
	* include/std/condition_variable (condition_variable_any::wait): Avoid
	terminating if relocking user mutex throws during stack-unwinding.
	* testsuite/30_threads/condition_variable_any/50862.cc: Add dg-require.

From-SVN: r180549
parent e7604cc4
2011-10-27 Jonathan Wakely <jwakely.gcc@gmail.com>
PR libstdc++/50862
* include/std/condition_variable (condition_variable_any::wait): Avoid
terminating if relocking user mutex throws during stack-unwinding.
* testsuite/30_threads/condition_variable_any/50862.cc: Add dg-require.
2011-10-25 Jonathan Wakely <jwakely.gcc@gmail.com>
* include/std/condition_variable (condition_variable_any): Remove
......
......@@ -205,7 +205,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// scoped unlock - unlocks in ctor, re-locks in dtor
struct _Unlock {
explicit _Unlock(_Lock& __lk) : _M_lock(__lk) { __lk.unlock(); }
~_Unlock() { _M_lock.lock(); }
~_Unlock() noexcept(false)
{
if (uncaught_exception())
__try { _M_lock.lock(); } __catch(...) { }
else
_M_lock.lock();
}
_Lock& _M_lock;
};
......
......@@ -4,6 +4,7 @@
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
// { dg-require-sched-yield "" }
// Copyright (C) 2011 Free Software Foundation, Inc.
//
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment