mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-12-29 03:24:36 +00:00
Prioritize vip_lock in shared_mutex
Should fix some deadlock issues.
This commit is contained in:
parent
239f53568c
commit
cf13dee1f3
@ -122,14 +122,14 @@ public:
|
|||||||
const u32 value = m_value.load();
|
const u32 value = m_value.load();
|
||||||
|
|
||||||
// Conditional increment
|
// Conditional increment
|
||||||
return value < c_one - 1 && (value % c_vip) == 0 && m_value.compare_and_swap_test(value, value + c_vip);
|
return (value < c_one - 1 || value & (c_one - c_vip)) && (value % c_vip) == 0 && m_value.compare_and_swap_test(value, value + c_vip);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lock_vip()
|
void lock_vip()
|
||||||
{
|
{
|
||||||
const u32 value = m_value.load();
|
const u32 value = m_value.load();
|
||||||
|
|
||||||
if (UNLIKELY(value >= c_one - 1 || (value % c_vip) || !m_value.compare_and_swap_test(value, value + c_vip)))
|
if (UNLIKELY((value >= c_one - 1 && !(value & (c_one - c_vip))) || (value % c_vip) || !m_value.compare_and_swap_test(value, value + c_vip)))
|
||||||
{
|
{
|
||||||
imp_lock_vip(value);
|
imp_lock_vip(value);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user