From 7806f9835a93500b13e2111431abc59099846c4a Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Fri, 8 Feb 2013 07:58:10 -0800 Subject: [PATCH 1/2] Correct a missing field from savestates in files. --- Core/HLE/sceIo.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Core/HLE/sceIo.cpp b/Core/HLE/sceIo.cpp index 19a3a5cf4c..2073ec4f9f 100644 --- a/Core/HLE/sceIo.cpp +++ b/Core/HLE/sceIo.cpp @@ -147,9 +147,10 @@ public: p.Do(callbackID); p.Do(callbackArg); p.Do(asyncResult); - p.Do(closePending); p.Do(pendingAsyncResult); p.Do(sectorBlockMode); + p.Do(closePending); + p.Do(info); p.Do(openMode); p.DoMarker("File"); } From 3ad565b4dfd394952406983818536250b3259c9a Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Fri, 8 Feb 2013 08:10:20 -0800 Subject: [PATCH 2/2] Keep filehandles open properly when loading state. --- Core/HLE/sceKernel.cpp | 1 + Core/SaveState.cpp | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Core/HLE/sceKernel.cpp b/Core/HLE/sceKernel.cpp index e74464b129..b31719cc08 100644 --- a/Core/HLE/sceKernel.cpp +++ b/Core/HLE/sceKernel.cpp @@ -157,6 +157,7 @@ void __KernelDoState(PointerWrap &p) p.DoMarker("KernelObjects"); __InterruptsDoState(p); + // Memory needs to be after kernel objects, which may free kernel memory. __KernelMemoryDoState(p); __KernelThreadingDoState(p); __KernelAlarmDoState(p); diff --git a/Core/SaveState.cpp b/Core/SaveState.cpp index bf4a2a8fde..8a450081c3 100644 --- a/Core/SaveState.cpp +++ b/Core/SaveState.cpp @@ -77,9 +77,10 @@ namespace SaveState Memory::DoState(p); MemoryStick_DoState(p); currentMIPS->DoState(p); - pspFileSystem.DoState(p); HLEDoState(p); __KernelDoState(p); + // Kernel object destructors might close open files, so do the filesystem last. + pspFileSystem.DoState(p); } void Enqueue(SaveState::Operation op)