diff --git a/Core/HLE/sceKernelMemory.cpp b/Core/HLE/sceKernelMemory.cpp index b6aac84eee..c11ee11489 100644 --- a/Core/HLE/sceKernelMemory.cpp +++ b/Core/HLE/sceKernelMemory.cpp @@ -2011,7 +2011,15 @@ void __KernelTlsplThreadEnd(SceUID threadID) TLSPL *tls = kernelObjects.Get(tlsID, error); if (tls) + { __KernelFreeTls(tls, threadID); + + // Restart the loop, freeing mutated it. + locked = tlsplThreadEndChecks.equal_range(threadID); + iter = locked.first; + if (locked.first == locked.second) + break; + } } tlsplThreadEndChecks.erase(locked.first, locked.second); }