Psmf: Cleanup finishThread save state handling.

This commit is contained in:
Unknown W. Brackets 2019-07-28 16:10:54 -07:00
parent 5fec5c90d8
commit ad274d5b72
3 changed files with 22 additions and 4 deletions

View file

@ -49,7 +49,9 @@ HLEHelperThread::HLEHelperThread(const char *threadName, const char *module, con
} }
HLEHelperThread::~HLEHelperThread() { HLEHelperThread::~HLEHelperThread() {
if (id_)
__KernelDeleteThread(id_, SCE_KERNEL_ERROR_THREAD_TERMINATED, "helper deleted"); __KernelDeleteThread(id_, SCE_KERNEL_ERROR_THREAD_TERMINATED, "helper deleted");
if (entry_)
kernelMemory.Free(entry_); kernelMemory.Free(entry_);
} }
@ -84,3 +86,8 @@ void HLEHelperThread::Terminate() {
bool HLEHelperThread::Stopped() { bool HLEHelperThread::Stopped() {
return KernelIsThreadDormant(id_); return KernelIsThreadDormant(id_);
} }
void HLEHelperThread::Forget() {
id_ = 0;
entry_ = 0;
}

View file

@ -33,6 +33,9 @@ public:
void Terminate(); void Terminate();
bool Stopped(); bool Stopped();
// For savestates.
void Forget();
private: private:
void AllocEntry(u32 size); void AllocEntry(u32 size);
void Create(const char *threadName, u32 prio, int stacksize); void Create(const char *threadName, u32 prio, int stacksize);

View file

@ -543,15 +543,23 @@ void PsmfPlayer::DoState(PointerWrap &p) {
} }
p.Do(psmfPlayerAvcAu); p.Do(psmfPlayerAvcAu);
if (s >= 7) { if (s >= 7) {
bool hasFinishThread = finishThread != NULL; bool hasFinishThread = finishThread != nullptr;
p.Do(hasFinishThread); p.Do(hasFinishThread);
if (hasFinishThread) { if (hasFinishThread) {
p.Do(finishThread); p.Do(finishThread);
} else {
if (finishThread)
finishThread->Forget();
delete finishThread;
finishThread = nullptr;
} }
} else if (s >= 6) { } else if (s >= 6) {
p.Do(finishThread); p.Do(finishThread);
} else { } else {
finishThread = NULL; if (finishThread)
finishThread->Forget();
delete finishThread;
finishThread = nullptr;
} }
if (s >= 8) { if (s >= 8) {