From bd759e585820e6cbd7a5db92d12d7c13b4921fa3 Mon Sep 17 00:00:00 2001 From: Silent Date: Sun, 4 Oct 2020 23:47:10 +0200 Subject: [PATCH] PsCreateSystemThreadEx: Fill dwThreadId immediately after creating the thread --- src/core/kernel/exports/EmuKrnlPs.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/kernel/exports/EmuKrnlPs.cpp b/src/core/kernel/exports/EmuKrnlPs.cpp index ebaa21662..fa185fb98 100644 --- a/src/core/kernel/exports/EmuKrnlPs.cpp +++ b/src/core/kernel/exports/EmuKrnlPs.cpp @@ -285,6 +285,9 @@ XBSYSAPI EXPORTNUM(255) xbox::NTSTATUS NTAPI xbox::PsCreateSystemThreadEx }*/ *ThreadHandle = (HANDLE)_beginthreadex(NULL, KernelStackSize, PCSTProxy, iPCSTProxyParam, NULL, (unsigned int*)&dwThreadId); + if (ThreadId != NULL) + *ThreadId = (xbox::HANDLE)dwThreadId; + // Note : DO NOT use iPCSTProxyParam anymore, since ownership is transferred to the proxy (which frees it too) EmuLog(LOG_LEVEL::DEBUG, "Waiting for Xbox proxy thread to start..."); @@ -322,9 +325,6 @@ XBSYSAPI EXPORTNUM(255) xbox::NTSTATUS NTAPI xbox::PsCreateSystemThreadEx EmuLog(LOG_LEVEL::DEBUG, "Created Xbox proxy thread. Handle : 0x%X, ThreadId : [0x%.4X]", *ThreadHandle, dwThreadId); CxbxKrnlRegisterThread(*ThreadHandle); - - if (ThreadId != NULL) - *ThreadId = (xbox::HANDLE)dwThreadId; } SwitchToThread();