diff --git a/src/thread/SDL_thread.c b/src/thread/SDL_thread.c index 0d02bcd312..639090c498 100644 --- a/src/thread/SDL_thread.c +++ b/src/thread/SDL_thread.c @@ -335,11 +335,6 @@ void SDL_RunThread(SDL_Thread *thread) // Perform any system-dependent setup - this function may not fail SDL_SYS_SetupThread(thread->name); - // Get the thread id - thread->threadid = SDL_GetCurrentThreadID(); - - SDL_SignalSemaphore(thread->ready_sem); // the thread is officially ready to run! - // Run the function *statusloc = userfunc(userdata); @@ -396,13 +391,6 @@ SDL_Thread *SDL_CreateThreadWithPropertiesRuntime(SDL_PropertiesID props, } } - thread->ready_sem = SDL_CreateSemaphore(0); - if (!thread->ready_sem) { - SDL_free(thread->name); - SDL_free(thread); - return NULL; - } - thread->userfunc = fn; thread->userdata = userdata; thread->stacksize = stacksize; @@ -413,16 +401,11 @@ SDL_Thread *SDL_CreateThreadWithPropertiesRuntime(SDL_PropertiesID props, if (!SDL_SYS_CreateThread(thread, pfnBeginThread, pfnEndThread)) { // Oops, failed. Gotta free everything SDL_SetObjectValid(thread, SDL_OBJECT_TYPE_THREAD, false); - SDL_DestroySemaphore(thread->ready_sem); SDL_free(thread->name); SDL_free(thread); return NULL; } - SDL_WaitSemaphore(thread->ready_sem); - SDL_DestroySemaphore(thread->ready_sem); - thread->ready_sem = NULL; - // Everything is running now return thread; } diff --git a/src/thread/SDL_thread_c.h b/src/thread/SDL_thread_c.h index 25b7096482..3659b85cc4 100644 --- a/src/thread/SDL_thread_c.h +++ b/src/thread/SDL_thread_c.h @@ -54,7 +54,6 @@ struct SDL_Thread SDL_error errbuf; char *name; size_t stacksize; // 0 for default, >0 for user-specified stack size. - SDL_Semaphore *ready_sem; // signals when the thread is set up and about to start running. int(SDLCALL *userfunc)(void *); void *userdata; void *data; diff --git a/src/thread/n3ds/SDL_systhread.c b/src/thread/n3ds/SDL_systhread.c index a9a18ab8f7..5c1f0a1fa0 100644 --- a/src/thread/n3ds/SDL_systhread.c +++ b/src/thread/n3ds/SDL_systhread.c @@ -72,6 +72,10 @@ bool SDL_SYS_CreateThread(SDL_Thread *thread, return SDL_SetError("Couldn't create thread"); } + u32 thread_ID = 0; + svcGetThreadId(&thread_ID, threadGetHandle(thread->handle)); + thread->threadid = (SDL_ThreadID) thread_ID; + return true; } diff --git a/src/thread/ps2/SDL_systhread.c b/src/thread/ps2/SDL_systhread.c index 96c9dcc8e5..6d038915c6 100644 --- a/src/thread/ps2/SDL_systhread.c +++ b/src/thread/ps2/SDL_systhread.c @@ -95,6 +95,9 @@ bool SDL_SYS_CreateThread(SDL_Thread *thread, if (StartThread(thread->handle, thread) < 0) { return SDL_SetError("StartThread() failed"); } + + thread->threadid = (SDL_ThreadID) thread->handle; + return true; } diff --git a/src/thread/psp/SDL_systhread.c b/src/thread/psp/SDL_systhread.c index 545165846d..f61dcea790 100644 --- a/src/thread/psp/SDL_systhread.c +++ b/src/thread/psp/SDL_systhread.c @@ -66,6 +66,8 @@ bool SDL_SYS_CreateThread(SDL_Thread *thread, return SDL_SetError("sceKernelCreateThread() failed"); } + thread->threadid = (SDL_ThreadID) thread->handle; + sceKernelStartThread(thread->handle, 4, &thread); return true; } diff --git a/src/thread/pthread/SDL_systhread.c b/src/thread/pthread/SDL_systhread.c index 09d3c896b8..f4d4c4d872 100644 --- a/src/thread/pthread/SDL_systhread.c +++ b/src/thread/pthread/SDL_systhread.c @@ -116,6 +116,8 @@ bool SDL_SYS_CreateThread(SDL_Thread *thread, return SDL_SetError("Not enough resources to create thread"); } + thread->threadid = (SDL_ThreadID) thread->handle; // the SDL thread ID is just the pthread_t. + return true; } diff --git a/src/thread/vita/SDL_systhread.c b/src/thread/vita/SDL_systhread.c index 79ac8b5ffb..32946522a1 100644 --- a/src/thread/vita/SDL_systhread.c +++ b/src/thread/vita/SDL_systhread.c @@ -86,6 +86,8 @@ bool SDL_SYS_CreateThread(SDL_Thread *thread, return SDL_SetError("sceKernelCreateThread() failed"); } + thread->threadid = (SDL_ThreadID) thread->handle; + sceKernelStartThread(thread->handle, 4, &thread); return true; } diff --git a/src/thread/windows/SDL_systhread.c b/src/thread/windows/SDL_systhread.c index 530f44929a..1244c34464 100644 --- a/src/thread/windows/SDL_systhread.c +++ b/src/thread/windows/SDL_systhread.c @@ -77,15 +77,18 @@ bool SDL_SYS_CreateThread(SDL_Thread *thread, thread->handle = (SYS_ThreadHandle)((size_t)pfnBeginThread(NULL, (unsigned int)thread->stacksize, RunThreadViaBeginThreadEx, thread, flags, &threadid)); + thread->threadid = (SDL_ThreadID) threadid; } else { DWORD threadid = 0; thread->handle = CreateThread(NULL, thread->stacksize, RunThreadViaCreateThread, thread, flags, &threadid); + thread->threadid = (SDL_ThreadID) threadid; } if (!thread->handle) { return SDL_SetError("Not enough resources to create thread"); } + return true; }