Explorar o código

Kernel: Don't re-assign object's handle when duplicating one

Yuri Kunde Schlesner %!s(int64=11) %!d(string=hai) anos
pai
achega
d751de7341
Modificáronse 2 ficheiros con 3 adicións e 2 borrados
  1. 2 1
      src/core/hle/kernel/kernel.cpp
  2. 1 1
      src/core/hle/kernel/kernel.h

+ 2 - 1
src/core/hle/kernel/kernel.cpp

@@ -44,7 +44,8 @@ ResultVal<Handle> HandleTable::Create(Object* obj) {
     objects[slot] = obj;
 
     Handle handle = generation | (slot << 15);
-    obj->handle = handle;
+    if (obj->handle == INVALID_HANDLE)
+        obj->handle = handle;
     return MakeResult<Handle>(handle);
 }
 

+ 1 - 1
src/core/hle/kernel/kernel.h

@@ -52,7 +52,7 @@ class HandleTable;
 
 class Object : NonCopyable {
     friend class HandleTable;
-    u32 handle;
+    u32 handle = INVALID_HANDLE;
 public:
     virtual ~Object() {}
     Handle GetHandle() const { return handle; }