diff --git a/CHANGES b/CHANGES index 704df3e95..96f92b22b 100644 --- a/CHANGES +++ b/CHANGES @@ -38,6 +38,7 @@ Bugfixes: - SDL: Fix race condition with audio thread when starting - GB: Fix flickering when screen is strobed quickly - FFmpeg: Fix overflow and general issues with audio encoding + - Core: Don't save state if core fails to serialize Misc: - SDL: Remove scancode key input - GBA Video: Clean up unused timers diff --git a/src/core/serialize.c b/src/core/serialize.c index bd6abd112..306b8f593 100644 --- a/src/core/serialize.c +++ b/src/core/serialize.c @@ -160,10 +160,9 @@ static bool _savePNGState(struct mCore* core, struct VFile* vf, struct mStateExt size_t stateSize = core->stateSize(core); void* state = anonymousMemoryMap(stateSize); - if (!state) { + if (!state || !core->saveState(core, state)) { return false; } - core->saveState(core, state); uLongf len = compressBound(stateSize); void* buffer = malloc(len); @@ -343,15 +342,14 @@ bool mCoreSaveStateNamed(struct mCore* core, struct VFile* vf, int flags) { UNUSED(flags); #endif vf->truncate(vf, stateSize); - struct GBASerializedState* state = vf->map(vf, stateSize, MAP_WRITE); - if (!state) { + void* state = vf->map(vf, stateSize, MAP_WRITE); + if (!state || !core->saveState(core, state)) { mStateExtdataDeinit(&extdata); if (cheatVf) { cheatVf->close(cheatVf); } return false; } - core->saveState(core, state); vf->unmap(vf, state, stateSize); vf->seek(vf, stateSize, SEEK_SET); mStateExtdataSerialize(&extdata, vf);