From f91135cedf7185f3401d8fa7aa76e600da66321f Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 18 May 2013 10:19:34 -0700 Subject: [PATCH] Prevent some threading related NULL derefs. --- Core/HLE/sceKernelThread.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Core/HLE/sceKernelThread.cpp b/Core/HLE/sceKernelThread.cpp index 4eef476f63..21b47cfe07 100644 --- a/Core/HLE/sceKernelThread.cpp +++ b/Core/HLE/sceKernelThread.cpp @@ -651,8 +651,12 @@ private: int size = cur->end - cur->first; if (size >= cur->capacity - 2) { - cur->capacity *= 2; - cur->data = (SceUID *)realloc(cur->data, cur->capacity * sizeof(SceUID)); + SceUID *new_data = (SceUID *)realloc(cur->data, cur->capacity * sizeof(SceUID)); + if (new_data != NULL) + { + cur->capacity *= 2; + cur->data = new_data; + } } int newFirst = (cur->capacity - size) / 2; @@ -2735,6 +2739,8 @@ void __KernelSwitchContext(Thread *target, const char *reason) hleCurrentThreadName = target->nt.name; __KernelChangeReadyState(target, currentThread, false); target->nt.status = (target->nt.status | THREADSTATUS_RUNNING) & ~THREADSTATUS_READY; + + __KernelLoadContext(&target->context, (target->nt.attr & PSP_THREAD_ATTR_VFPU) != 0); } else { @@ -2742,8 +2748,6 @@ void __KernelSwitchContext(Thread *target, const char *reason) hleCurrentThreadName = NULL; } - __KernelLoadContext(&target->context, (target->nt.attr & PSP_THREAD_ATTR_VFPU) != 0); - bool fromIdle = oldUID == threadIdleID[0] || oldUID == threadIdleID[1]; bool toIdle = currentThread == threadIdleID[0] || currentThread == threadIdleID[1]; if (!(fromIdle && toIdle))