From ff7c3ab10d36eaa3a444e326cf66d55e93f978f3 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 15 Jul 2014 07:14:13 -0700 Subject: [PATCH] Oops, would still infinite loop on a bad module. Should really fix #6552 this time. --- Core/HLE/sceKernelModule.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index 7687c230b3..7c1af5a784 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -1478,9 +1478,14 @@ bool __KernelLoadExec(const char *filename, u32 paramPtr, std::string *error_str { u32 error; while (!loadedModules.empty()) { - Module *module = kernelObjects.Get(*loadedModules.begin(), error); + SceUID moduleID = *loadedModules.begin(); + Module *module = kernelObjects.Get(moduleID, error); if (module) { module->Cleanup(); + } else { + // An invalid module. We need to remove it or we'll loop forever. + WARN_LOG(LOADER, "Invalid module still marked as loaded on loadexec"); + loadedModules.erase(moduleID); } }