CPU/HLE: Lock the HLE mutex before performing a reschedule.

Another thread might be in the middle of an SVC, thus altering the state of the schedulers.
This commit is contained in:
Subv 2018-08-12 17:50:44 -05:00
parent 84b542c386
commit 3a338d9286

View file

@ -14,6 +14,7 @@
#include "core/core_timing.h" #include "core/core_timing.h"
#include "core/hle/kernel/scheduler.h" #include "core/hle/kernel/scheduler.h"
#include "core/hle/kernel/thread.h" #include "core/hle/kernel/thread.h"
#include "core/hle/lock.h"
#include "core/settings.h" #include "core/settings.h"
namespace Core { namespace Core {
@ -125,6 +126,8 @@ void Cpu::Reschedule() {
} }
reschedule_pending = false; reschedule_pending = false;
// Lock the global kernel mutex when we manipulate the HLE state
std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock);
scheduler->Reschedule(); scheduler->Reschedule();
} }