From 099d9cd0fdb095b5e7e023b460c675d8992ae840 Mon Sep 17 00:00:00 2001 From: Malkierian Date: Wed, 17 May 2023 12:51:17 -0700 Subject: [PATCH] Threaded save was causing issues for old `oot-save.sav` conversion. Added an option just for that instance to run `SaveManager::SaveFileThreaded` outside of a thread. Everything else still runs threaded. (#2894) --- soh/soh/SaveManager.cpp | 12 ++++++++---- soh/soh/SaveManager.h | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/soh/soh/SaveManager.cpp b/soh/soh/SaveManager.cpp index 99ec2026c..240f73863 100644 --- a/soh/soh/SaveManager.cpp +++ b/soh/soh/SaveManager.cpp @@ -754,14 +754,18 @@ void SaveManager::SaveFileThreaded(int fileNum, SaveContext* saveContext) { GameInteractor::Instance->ExecuteHooks(fileNum); } -void SaveManager::SaveFile(int fileNum) { +void SaveManager::SaveFile(int fileNum, bool threaded) { if (fileNum == 0xFF) { return; } // Can't think of any time the promise would be needed, so use push_task instead of submit auto saveContext = new SaveContext; memcpy(saveContext, &gSaveContext, sizeof(gSaveContext)); - smThreadPool->push_task_back(&SaveManager::SaveFileThreaded, this, fileNum, saveContext); + if (threaded) { + smThreadPool->push_task_back(&SaveManager::SaveFileThreaded, this, fileNum, saveContext); + } else { + SaveFileThreaded(fileNum, saveContext); + } } void SaveManager::SaveGlobal() { @@ -2135,7 +2139,7 @@ void SaveManager::ConvertFromUnversioned() { static SaveContext saveContextSave = gSaveContext; InitFile(false); CopyV0Save(*file, gSaveContext); - SaveFile(fileNum); + SaveFile(fileNum, false); InitMeta(fileNum); gSaveContext = saveContextSave; } @@ -2156,7 +2160,7 @@ extern "C" void Save_InitFile(int isDebug) { } extern "C" void Save_SaveFile(void) { - SaveManager::Instance->SaveFile(gSaveContext.fileNum); + SaveManager::Instance->SaveFile(gSaveContext.fileNum, true); } extern "C" void Save_SaveGlobal(void) { diff --git a/soh/soh/SaveManager.h b/soh/soh/SaveManager.h index 8b32774e1..d5c8def68 100644 --- a/soh/soh/SaveManager.h +++ b/soh/soh/SaveManager.h @@ -52,7 +52,7 @@ public: void Init(); void InitFile(bool isDebug); - void SaveFile(int fileNum); + void SaveFile(int fileNum, bool threaded); void SaveGlobal(); void LoadFile(int fileNum); bool SaveFile_Exist(int fileNum);