Jelajahi Sumber

Mutex: Add the calling thread to the waiting list when needed

This will happen when the mutex is already owned by another thread. Should fix some issues with games being stuck due to waiting threads not being awoken.
Subv 11 tahun lalu
induk
melakukan
ea80363cc2
1 mengubah file dengan 2 tambahan dan 2 penghapusan
  1. 2 2
      src/core/hle/kernel/mutex.cpp

+ 2 - 2
src/core/hle/kernel/mutex.cpp

@@ -168,9 +168,9 @@ Handle CreateMutex(bool initial_locked, const std::string& name) {
 ResultVal<bool> Mutex::WaitSynchronization() {
 ResultVal<bool> Mutex::WaitSynchronization() {
     bool wait = locked;
     bool wait = locked;
     if (locked) {
     if (locked) {
+        waiting_threads.push_back(GetCurrentThreadHandle());
         Kernel::WaitCurrentThread(WAITTYPE_MUTEX, GetHandle());
         Kernel::WaitCurrentThread(WAITTYPE_MUTEX, GetHandle());
-    }
-    else {
+    } else {
         // Lock the mutex when the first thread accesses it
         // Lock the mutex when the first thread accesses it
         locked = true;
         locked = true;
         MutexAcquireLock(this);
         MutexAcquireLock(this);