atomic.hpp: fixup for atomic waiting

This commit is contained in:
Nekotekina 2019-09-21 14:02:13 +03:00
parent feee3838eb
commit 74471e8ea3

View File

@ -258,15 +258,20 @@ void atomic_storage_futex::wait(const void* data, std::size_t size, u64 old_valu
{ {
if (value & s_waiter_mask) if (value & s_waiter_mask)
{ {
value -= s_waiter_mask & -s_waiter_mask;
#ifdef _WIN32 #ifdef _WIN32
if (!fallback) if (!fallback)
{ {
if ((value & s_signal_mask) == 0)
{
return false;
}
value -= s_signal_mask & -s_signal_mask; value -= s_signal_mask & -s_signal_mask;
} }
#endif #endif
value -= s_waiter_mask & -s_waiter_mask;
if ((value & s_waiter_mask) == 0) if ((value & s_waiter_mask) == 0)
{ {
// Reset on last waiter // Reset on last waiter