semaphore: Yet another race condition fix
This commit is contained in:
parent
b7c3ff932b
commit
2bea573ea8
|
@ -41,7 +41,6 @@ public:
|
||||||
AddWaiter(waiter);
|
AddWaiter(waiter);
|
||||||
|
|
||||||
// Perform the wait.
|
// Perform the wait.
|
||||||
std::exchange(lk, std::unique_lock{waiter.mutex});
|
|
||||||
return waiter.Wait(lk, timeout);
|
return waiter.Wait(lk, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,10 +58,9 @@ public:
|
||||||
it++;
|
it++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
std::scoped_lock lk2{waiter.mutex};
|
it = wait_list.erase(it);
|
||||||
token_count -= waiter.need_count;
|
token_count -= waiter.need_count;
|
||||||
waiter.cv.notify_one();
|
waiter.cv.notify_one();
|
||||||
it = wait_list.erase(it);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -84,7 +82,6 @@ public:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
struct WaitingThread : public ListBaseHook {
|
struct WaitingThread : public ListBaseHook {
|
||||||
std::mutex mutex;
|
|
||||||
std::string name;
|
std::string name;
|
||||||
std::condition_variable cv;
|
std::condition_variable cv;
|
||||||
u32 priority;
|
u32 priority;
|
||||||
|
|
Loading…
Reference in New Issue