mirror of
https://github.com/yuzu-emu/yuzu.git
synced 2025-06-15 14:27:56 -05:00
k_thread: Use a mutex and cond_var to sync bool
std::atomic<bool> is broken on MinGW and causes deadlocks there. Use a normal cond var in its stead.
This commit is contained in:
@ -4,6 +4,8 @@
|
||||
#include <algorithm>
|
||||
#include <atomic>
|
||||
#include <cinttypes>
|
||||
#include <condition_variable>
|
||||
#include <mutex>
|
||||
#include <optional>
|
||||
#include <vector>
|
||||
|
||||
@ -1313,7 +1315,8 @@ void KThread::RequestDummyThreadWait() {
|
||||
ASSERT(this->IsDummyThread());
|
||||
|
||||
// We will block when the scheduler lock is released.
|
||||
m_dummy_thread_runnable.store(false);
|
||||
std::scoped_lock lock{m_dummy_thread_mutex};
|
||||
m_dummy_thread_runnable = false;
|
||||
}
|
||||
|
||||
void KThread::DummyThreadBeginWait() {
|
||||
@ -1323,7 +1326,8 @@ void KThread::DummyThreadBeginWait() {
|
||||
}
|
||||
|
||||
// Block until runnable is no longer false.
|
||||
m_dummy_thread_runnable.wait(false);
|
||||
std::unique_lock lock{m_dummy_thread_mutex};
|
||||
m_dummy_thread_cv.wait(lock, [this] { return m_dummy_thread_runnable; });
|
||||
}
|
||||
|
||||
void KThread::DummyThreadEndWait() {
|
||||
@ -1331,8 +1335,11 @@ void KThread::DummyThreadEndWait() {
|
||||
ASSERT(this->IsDummyThread());
|
||||
|
||||
// Wake up the waiting thread.
|
||||
m_dummy_thread_runnable.store(true);
|
||||
m_dummy_thread_runnable.notify_one();
|
||||
{
|
||||
std::scoped_lock lock{m_dummy_thread_mutex};
|
||||
m_dummy_thread_runnable = true;
|
||||
}
|
||||
m_dummy_thread_cv.notify_one();
|
||||
}
|
||||
|
||||
void KThread::BeginWait(KThreadQueue* queue) {
|
||||
|
Reference in New Issue
Block a user