From a194006aad354095e5654abb54fb3c66638afddb Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 8 Oct 2013 22:38:37 -0700 Subject: [PATCH] Fix crash deleting a never started thread. Fixes #4069. --- Core/HLE/sceKernelThread.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Core/HLE/sceKernelThread.cpp b/Core/HLE/sceKernelThread.cpp index 1d5bc12cae..d594443130 100644 --- a/Core/HLE/sceKernelThread.cpp +++ b/Core/HLE/sceKernelThread.cpp @@ -402,6 +402,7 @@ public: if (currentStack.start == (u32)-1) { currentStack.start = 0; + nt.initialStack = 0; ERROR_LOG(SCEKERNEL, "Failed to allocate stack for thread"); return false; } @@ -437,8 +438,8 @@ public: if (currentStack.start != 0) { DEBUG_LOG(SCEKERNEL, "Freeing thread stack %s", nt.name); - if (nt.attr & PSP_THREAD_ATTR_CLEAR_STACK) { - Memory::Memset(currentStack.start, 0, currentStack.end - currentStack.start); + if ((nt.attr & PSP_THREAD_ATTR_CLEAR_STACK) != 0 && nt.initialStack != 0) { + Memory::Memset(nt.initialStack, 0, nt.stackSize); } if (nt.attr & PSP_THREAD_ATTR_KERNEL) {