diff options
| author | wwylele <wwylele@gmail.com> | 2016-05-29 12:52:29 +0300 | 
|---|---|---|
| committer | wwylele <wwylele@gmail.com> | 2016-05-30 07:34:53 +0300 | 
| commit | 81d3462a199dbaa0c95faa203918cd21d1da1277 (patch) | |
| tree | 68f17aab52e74156f74e1ace76e5513b04034f7b | |
| parent | ab4b27f0f5760c7f378f29756d3ce631bafca1b2 (diff) | |
Switch context on the same thread if necessary
| -rw-r--r-- | src/core/hle/kernel/thread.cpp | 8 | 
1 files changed, 6 insertions, 2 deletions
| diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 3f6bec5fa..db2728a7b 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -542,8 +542,12 @@ void Reschedule() {      HLE::DoneRescheduling(); -    // Don't bother switching to the same thread -    if (next == cur) +    // Don't bother switching to the same thread. +    // But if the thread was waiting on objects, we still need to switch it +    // to perform PC modification, change state to RUNNING, etc. +    // This occurs in the case when an object the thread is waiting on immediately wakes up +    // the current thread before Reschedule() is called. +    if (next == cur && (next == nullptr || next->waitsynch_waited == false))          return;      if (cur && next) { | 
