Skip to content

Commit

Permalink
Threaded save was causing issues for old oot-save.sav conversion. A…
Browse files Browse the repository at this point in the history
…dded an option just for that instance to run `SaveManager::SaveFileThreaded` outside of a thread. Everything else still runs threaded. (#2894)
  • Loading branch information
Malkierian committed May 17, 2023
1 parent d8891f1 commit 099d9cd
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 5 deletions.
12 changes: 8 additions & 4 deletions soh/soh/SaveManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -754,14 +754,18 @@ void SaveManager::SaveFileThreaded(int fileNum, SaveContext* saveContext) {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnSaveFile>(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() {
Expand Down Expand Up @@ -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;
}
Expand All @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion soh/soh/SaveManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class SaveManager {

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);
Expand Down

0 comments on commit 099d9cd

Please sign in to comment.