Comments
Patch
===================================================================
@@ -663,16 +663,19 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
static int
__do_try_lock(tuple<_Lock&...>& __locks)
{
- if(std::get<_Idx>(__locks).try_lock())
- {
- return __try_lock_impl<_Idx + 1,
- _Idx + 2 < sizeof...(_Lock)>::__do_try_lock(__locks);
- }
- else
- {
- __unlock_impl<_Idx>::__do_unlock(__locks);
- return _Idx;
- }
+ __try
+ {
+ if(std::get<_Idx>(__locks).try_lock())
+ {
+ return __try_lock_impl<_Idx + 1,
+ _Idx + 2 < sizeof...(_Lock)>::__do_try_lock(__locks);
+ }
+ }
+ __catch(...)
+ {
+ }
+ __unlock_impl<_Idx - 1>::__do_unlock(__locks);
+ return _Idx;
}
};
@@ -683,13 +686,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
static int
__do_try_lock(tuple<_Lock&...>& __locks)
{
- if(std::get<_Idx>(__locks).try_lock())
- return -1;
- else
+ __try
+ {
+ if(std::get<_Idx>(__locks).try_lock())
+ return -1;
+ }
+ __catch(...)
{
- __unlock_impl<_Idx>::__do_unlock(__locks);
- return _Idx;
}
+ __unlock_impl<_Idx - 1>::__do_unlock(__locks);
+ return _Idx;
}
};