From d1d9fb5bbfbb3b3f6bbd00c0a52eac24f9b35356 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 17 Sep 2013 08:11:51 -0700 Subject: [PATCH] Start the kernel ids over on reset. So that things aren't affected by wrapping over. Although, maybe we should handle that better if it causes incorrect behavior... --- Core/HLE/sceKernel.cpp | 3 ++- Core/HLE/sceKernel.h | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Core/HLE/sceKernel.cpp b/Core/HLE/sceKernel.cpp index e5e47814c5..3335c9fa26 100644 --- a/Core/HLE/sceKernel.cpp +++ b/Core/HLE/sceKernel.cpp @@ -424,7 +424,7 @@ u32 sceKernelIcacheClearAll() KernelObjectPool::KernelObjectPool() { memset(occupied, 0, sizeof(bool)*maxCount); - nextID = 16; + nextID = initialNextID; } SceUID KernelObjectPool::Create(KernelObject *obj, int rangeBottom, int rangeTop) @@ -470,6 +470,7 @@ void KernelObjectPool::Clear() occupied[i]=false; } memset(pool, 0, sizeof(KernelObject*)*maxCount); + nextID = initialNextID; } KernelObject *&KernelObjectPool::operator [](SceUID handle) diff --git a/Core/HLE/sceKernel.h b/Core/HLE/sceKernel.h index 80aedfde1e..cbcea4f407 100644 --- a/Core/HLE/sceKernel.h +++ b/Core/HLE/sceKernel.h @@ -427,7 +427,7 @@ public: ~KernelObjectPool() {} // Allocates a UID within the range and inserts the object into the map. - SceUID Create(KernelObject *obj, int rangeBottom = 16, int rangeTop = 0x7fffffff); + SceUID Create(KernelObject *obj, int rangeBottom = initialNextID, int rangeTop = 0x7fffffff); void DoState(PointerWrap &p); static KernelObject *CreateByIDType(int type); @@ -520,8 +520,9 @@ public: private: enum { - maxCount=4096, - handleOffset=0x100 + maxCount = 4096, + handleOffset = 0x100, + initialNextID = 0x10 }; KernelObject *pool[maxCount]; bool occupied[maxCount];