From 01d3dcdc99ecbbedb2069994cae5e7c58060021b Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 29 Jun 2014 17:44:56 -0700 Subject: [PATCH] Prevent a possible race condition in save/load. --- Core/Dialog/PSPSaveDialog.cpp | 2 ++ Core/Dialog/PSPSaveDialog.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Core/Dialog/PSPSaveDialog.cpp b/Core/Dialog/PSPSaveDialog.cpp index 9f17d16836..7a228b07ac 100755 --- a/Core/Dialog/PSPSaveDialog.cpp +++ b/Core/Dialog/PSPSaveDialog.cpp @@ -584,6 +584,7 @@ int PSPSaveDialog::Update(int animSpeed) memset(&request, 0, sizeof(request)); Memory::Memcpy(&request, requestAddr, size); Memory::Memcpy(&originalRequest, requestAddr, size); + lock_guard guard(paramLock); param.SetPspParam(&request); } @@ -990,6 +991,7 @@ int PSPSaveDialog::Update(int animSpeed) } void PSPSaveDialog::ExecuteIOAction() { + lock_guard guard(paramLock); switch (display) { case DS_LOAD_LOADING: if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave)) { diff --git a/Core/Dialog/PSPSaveDialog.h b/Core/Dialog/PSPSaveDialog.h index c26a40c437..dc39b7b917 100644 --- a/Core/Dialog/PSPSaveDialog.h +++ b/Core/Dialog/PSPSaveDialog.h @@ -18,6 +18,7 @@ #pragma once #include "native/thread/thread.h" +#include "native/base/mutex.h" #include "Core/Dialog/PSPDialog.h" #include "Core/Dialog/SavedataParam.h" @@ -150,6 +151,7 @@ private: }; std::thread *ioThread; + recursive_mutex paramLock; volatile SaveIOStatus ioThreadStatus; };