State: Use RunOnCPUThread to invoke save state handlers

This ensures that the emulated state is only touched by the CPU thread
This commit is contained in:
Stenzek 2019-06-29 18:25:04 +10:00
parent df45e714a3
commit a25a4e0708
1 changed files with 105 additions and 97 deletions

View File

@ -204,16 +204,19 @@ void LoadFromBuffer(std::vector<u8>& buffer)
return;
}
Core::RunAsCPUThread([&] {
Core::RunOnCPUThread(
[&] {
u8* ptr = &buffer[0];
PointerWrap p(&ptr, PointerWrap::MODE_READ);
DoState(p);
});
},
true);
}
void SaveToBuffer(std::vector<u8>& buffer)
{
Core::RunAsCPUThread([&] {
Core::RunOnCPUThread(
[&] {
u8* ptr = nullptr;
PointerWrap p(&ptr, PointerWrap::MODE_MEASURE);
@ -224,7 +227,8 @@ void SaveToBuffer(std::vector<u8>& buffer)
ptr = &buffer[0];
p.SetMode(PointerWrap::MODE_WRITE);
DoState(p);
});
},
true);
}
// return state number not in map
@ -381,7 +385,8 @@ static void CompressAndDumpState(CompressAndDumpState_args save_args)
void SaveAs(const std::string& filename, bool wait)
{
Core::RunAsCPUThread([&] {
Core::RunOnCPUThread(
[&] {
// Measure the size of the buffer.
u8* ptr = nullptr;
PointerWrap p(&ptr, PointerWrap::MODE_MEASURE);
@ -416,7 +421,8 @@ void SaveAs(const std::string& filename, bool wait)
// someone aborted the save by changing the mode?
Core::DisplayMessage("Unable to save: Internal DoState Error", 4000);
}
});
},
true);
}
bool ReadHeader(const std::string& filename, StateHeader& header)
@ -525,7 +531,8 @@ void LoadAs(const std::string& filename)
return;
}
Core::RunAsCPUThread([&] {
Core::RunOnCPUThread(
[&] {
g_loadDepth++;
// Save temp buffer for undo load state
@ -582,7 +589,8 @@ void LoadAs(const std::string& filename)
s_on_after_load_callback();
g_loadDepth--;
});
},
true);
}
void SetOnAfterLoadCallback(AfterLoadCallbackFunc callback)