From bcecd881b189a86ad8886eeaa4259aac29d4e501 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Fri, 28 Dec 2012 13:01:46 -0800 Subject: [PATCH] Savestate cleanup + be more careful with vectors. For some reason I debugged it going into std::string so I just made them all more explicit which fixed everything. --- Core/HLE/HLE.cpp | 2 +- Core/HLE/sceCtrl.cpp | 3 ++- Core/HLE/sceKernelEventFlag.cpp | 2 +- Core/HLE/sceKernelMbx.cpp | 2 +- Core/HLE/sceKernelModule.cpp | 1 + Core/HLE/sceKernelMsgPipe.cpp | 8 ++++++-- Core/HLE/sceKernelMutex.cpp | 6 ++++-- Core/HLE/sceKernelSemaphore.cpp | 3 ++- Core/HLE/sceKernelThread.cpp | 4 ++-- Core/HW/SasAudio.cpp | 1 + Core/Util/BlockAllocator.cpp | 3 +-- 11 files changed, 22 insertions(+), 13 deletions(-) diff --git a/Core/HLE/HLE.cpp b/Core/HLE/HLE.cpp index 7d5c426c49..ef81fa2a23 100644 --- a/Core/HLE/HLE.cpp +++ b/Core/HLE/HLE.cpp @@ -60,7 +60,7 @@ void HLEInit() void HLEDoState(PointerWrap &p) { - p.Do(unresolvedSyscalls); + p.Do(unresolvedSyscalls, Syscall()); p.DoMarker("HLE"); } diff --git a/Core/HLE/sceCtrl.cpp b/Core/HLE/sceCtrl.cpp index 4fbc8bb455..234bb3dc5f 100644 --- a/Core/HLE/sceCtrl.cpp +++ b/Core/HLE/sceCtrl.cpp @@ -303,7 +303,8 @@ void __CtrlDoState(PointerWrap &p) p.Do(ctrlCycle); - p.Do(waitingThreads); + SceUID dv = 0; + p.Do(waitingThreads, dv); p.Do(ctrlTimer); CoreTiming::RestoreRegisterEvent(ctrlTimer, "CtrlSampleTimer", __CtrlTimerUpdate); diff --git a/Core/HLE/sceKernelEventFlag.cpp b/Core/HLE/sceKernelEventFlag.cpp index 80471c4c4d..d57d63c9bd 100644 --- a/Core/HLE/sceKernelEventFlag.cpp +++ b/Core/HLE/sceKernelEventFlag.cpp @@ -66,7 +66,7 @@ public: virtual void DoState(PointerWrap &p) { p.Do(nef); - p.Do(waitingThreads); + p.Do(waitingThreads, EventFlagTh()); p.DoMarker("EventFlag"); } diff --git a/Core/HLE/sceKernelMbx.cpp b/Core/HLE/sceKernelMbx.cpp index 34aea59532..205a97460d 100644 --- a/Core/HLE/sceKernelMbx.cpp +++ b/Core/HLE/sceKernelMbx.cpp @@ -156,7 +156,7 @@ struct Mbx : public KernelObject virtual void DoState(PointerWrap &p) { p.Do(nmb); - p.Do(waitingThreads); + p.Do(waitingThreads, MbxWaitingThread()); p.DoMarker("Mbx"); } diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index 701b51297c..8f35526859 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -145,6 +145,7 @@ public: virtual void DoState(PointerWrap &p) { p.Do(moduleID_); p.Do(retValAddr); + p.DoMarker("AfterModuleEntryCall"); } static Action *Create() { return new AfterModuleEntryCall; diff --git a/Core/HLE/sceKernelMsgPipe.cpp b/Core/HLE/sceKernelMsgPipe.cpp index 6e727c7da0..92ef03c74a 100644 --- a/Core/HLE/sceKernelMsgPipe.cpp +++ b/Core/HLE/sceKernelMsgPipe.cpp @@ -155,12 +155,16 @@ struct MsgPipe : public KernelObject virtual void DoState(PointerWrap &p) { p.Do(nmp); - p.Do(sendWaitingThreads); - p.Do(receiveWaitingThreads); + p.Do(sendWaitingThreads, MsgPipeWaitingThread()); + p.Do(receiveWaitingThreads, MsgPipeWaitingThread()); bool hasBuffer = buffer != NULL; p.Do(hasBuffer); if (hasBuffer) + { + if (buffer == NULL) + buffer = new u8[nmp.bufSize]; p.DoArray(buffer, nmp.bufSize); + } p.DoMarker("MsgPipe"); } diff --git a/Core/HLE/sceKernelMutex.cpp b/Core/HLE/sceKernelMutex.cpp index a6243fff08..a591e4ce6d 100644 --- a/Core/HLE/sceKernelMutex.cpp +++ b/Core/HLE/sceKernelMutex.cpp @@ -66,7 +66,8 @@ struct Mutex : public KernelObject virtual void DoState(PointerWrap &p) { p.Do(nm); - p.Do(waitingThreads); + SceUID dv = 0; + p.Do(waitingThreads, dv); p.DoMarker("Mutex"); } @@ -115,7 +116,8 @@ struct LwMutex : public KernelObject virtual void DoState(PointerWrap &p) { p.Do(nm); - p.Do(waitingThreads); + SceUID dv = 0; + p.Do(waitingThreads, dv); p.DoMarker("LwMutex"); } diff --git a/Core/HLE/sceKernelSemaphore.cpp b/Core/HLE/sceKernelSemaphore.cpp index 6e213ff31d..f9e5cd4e0b 100644 --- a/Core/HLE/sceKernelSemaphore.cpp +++ b/Core/HLE/sceKernelSemaphore.cpp @@ -60,7 +60,8 @@ struct Semaphore : public KernelObject virtual void DoState(PointerWrap &p) { p.Do(ns); - p.Do(waitingThreads); + SceUID dv = 0; + p.Do(waitingThreads, dv); p.DoMarker("Semaphore"); } diff --git a/Core/HLE/sceKernelThread.cpp b/Core/HLE/sceKernelThread.cpp index 7732c558ce..e791219d2b 100644 --- a/Core/HLE/sceKernelThread.cpp +++ b/Core/HLE/sceKernelThread.cpp @@ -431,7 +431,6 @@ public: for (size_t i = 0; i < THREAD_CALLBACK_NUM_TYPES; ++i) { - std::set::iterator it, end; p.Do(registeredCallbacks[i]); p.Do(readyCallbacks[i]); } @@ -615,7 +614,8 @@ void __KernelThreadingDoState(PointerWrap &p) p.Do(intReturnHackAddr); p.Do(currentThread); - p.Do(threadqueue); + SceUID dv = 0; + p.Do(threadqueue, dv); p.DoArray(threadIdleID, ARRAY_SIZE(threadIdleID)); p.Do(dispatchEnabled); p.Do(curModule); diff --git a/Core/HW/SasAudio.cpp b/Core/HW/SasAudio.cpp index 6eb53d3f0d..3845922fbe 100644 --- a/Core/HW/SasAudio.cpp +++ b/Core/HW/SasAudio.cpp @@ -336,6 +336,7 @@ void SasInstance::DoState(PointerWrap &p) { p.Do(sampleRate); p.Do(outputMode); + // SetGrainSize() / ClearGrainSize() should've made our buffers match. if (mixBuffer != NULL && grainSize > 0) { p.DoArray(mixBuffer, grainSize * 2); } diff --git a/Core/Util/BlockAllocator.cpp b/Core/Util/BlockAllocator.cpp index 66cc8484e7..d778012ab9 100644 --- a/Core/Util/BlockAllocator.cpp +++ b/Core/Util/BlockAllocator.cpp @@ -300,8 +300,7 @@ u32 BlockAllocator::GetTotalFreeBytes() void BlockAllocator::DoState(PointerWrap &p) { - Block default_value(0, 0, false); - p.Do(blocks, default_value); + p.Do(blocks, Block(0, 0, false)); p.Do(rangeStart_); p.Do(rangeSize_); p.Do(grain_);