Просмотр исходного кода

Merge pull request #496 from Subv/waitprocesswidekey_timeout

Kernel/Threads: A thread waking up by timeout from a WaitProcessWideKey may already have an assigned lock owner.
bunnei 8 лет назад
Родитель
Сommit
63270e588b
1 измененных файлов с 5 добавлено и 2 удалено
  1. 5 2
      src/core/hle/kernel/thread.cpp

+ 5 - 2
src/core/hle/kernel/thread.cpp

@@ -133,8 +133,11 @@ static void ThreadWakeupCallback(u64 thread_handle, int cycles_late) {
 
         auto lock_owner = thread->lock_owner;
         // Threads waking up by timeout from WaitProcessWideKey do not perform priority inheritance
-        // and don't have a lock owner.
-        ASSERT(lock_owner == nullptr);
+        // and don't have a lock owner unless SignalProcessWideKey was called first and the thread
+        // wasn't awakened due to the mutex already being acquired.
+        if (lock_owner) {
+            lock_owner->RemoveMutexWaiter(thread);
+        }
     }
 
     if (resume)