From e76f945c7ebd2cd9109e60e187991df47c94ffe7 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Thu, 8 Aug 2013 23:30:45 -0700 Subject: [PATCH] Use the native cond vars for the CPU thread. --- Core/System.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Core/System.cpp b/Core/System.cpp index b0db7358b..2e45ec337 100644 --- a/Core/System.cpp +++ b/Core/System.cpp @@ -19,6 +19,9 @@ #include "Common/CommonWindows.h" #endif +#include "native/thread/thread.h" +#include "native/base/mutex.h" + #include "Core/MemMap.h" #include "Core/MIPS/MIPS.h" @@ -39,9 +42,7 @@ #include "Core/PSPLoaders.h" #include "Core/ELF/ParamSFO.h" #include "Core/SaveState.h" -#include "Common/StdConditionVariable.h" #include "Common/Thread.h" -#include "Common/StdThread.h" #include "Common/LogManager.h" #include "GPU/GPUState.h" @@ -63,8 +64,8 @@ GlobalUIState globalUIState; static CoreParameter coreParameter; static PSPMixer *mixer; static std::thread *cpuThread = NULL; -static std::mutex cpuThreadLock; -static std::condition_variable cpuThreadCond; +static recursive_mutex cpuThreadLock; +static condition_variable cpuThreadCond; static u64 cpuThreadUntil; // This can be read and written from ANYWHERE. @@ -76,7 +77,7 @@ static volatile CPUThreadState cpuThreadState = CPU_THREAD_NOT_RUNNING; bool CPU_NextState(CPUThreadState from, CPUThreadState to) { if (cpuThreadState == from) { cpuThreadState = to; - cpuThreadCond.notify_all(); + cpuThreadCond.notify_one(); return true; } else { return false; @@ -85,7 +86,7 @@ bool CPU_NextState(CPUThreadState from, CPUThreadState to) { void CPU_SetState(CPUThreadState to) { cpuThreadState = to; - cpuThreadCond.notify_all(); + cpuThreadCond.notify_one(); } bool CPU_IsReady() { @@ -101,8 +102,10 @@ bool CPU_HasPendingAction() { } void CPU_WaitStatus(bool (*pred)()) { - std::unique_lock uniqueLock(cpuThreadLock); - cpuThreadCond.wait(uniqueLock, pred); + cpuThreadLock.lock(); + while (!pred()) + cpuThreadCond.wait(cpuThreadLock); + cpuThreadLock.unlock(); } void CPU_Init() {