mutex (try_lock): Do not swallow exceptions.

* include/std/mutex (try_lock): Do not swallow exceptions.
	* testsuite/30_threads/try_lock/4.cc: Fix test.

From-SVN: r215467
This commit is contained in:
Jonathan Wakely 2014-09-22 15:54:35 +01:00 committed by Jonathan Wakely
parent ed26fe9e4a
commit 726d31362a
3 changed files with 15 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2014-09-22 Jonathan Wakely <jwakely@redhat.com>
* include/std/mutex (try_lock): Do not swallow exceptions.
* testsuite/30_threads/try_lock/4.cc: Fix test.
2014-09-22 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/54316

View File

@ -630,12 +630,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
int __idx;
auto __locks = std::tie(__l1, __l2, __l3...);
__try
{ __try_lock_impl<0>::__do_try_lock(__locks, __idx); }
__catch(const __cxxabiv1::__forced_unwind&)
{ __throw_exception_again; }
__catch(...)
{ }
__try_lock_impl<0>::__do_try_lock(__locks, __idx);
return __idx;
}

View File

@ -133,8 +133,15 @@ void test03()
while (unreliable_lock::throw_on < 3)
{
unreliable_lock::count = 0;
int failed = std::try_lock(l1, l2, l3);
VERIFY( failed == unreliable_lock::throw_on );
try
{
std::try_lock(l1, l2, l3);
VERIFY( false );
}
catch (int e)
{
VERIFY( e == unreliable_lock::throw_on );
}
++unreliable_lock::throw_on;
}
}