diff -r b229328c7ad4 -r 3a041d215edc src/thread/SDL_thread.c --- a/src/thread/SDL_thread.c Tue Sep 27 23:16:04 2011 -0400 +++ b/src/thread/SDL_thread.c Sun Oct 02 00:29:16 2011 -0400 @@ -188,25 +188,19 @@ void SDL_RunThread(void *data) { - thread_args *args; - int (SDLCALL * userfunc) (void *); - void *userdata; - int *statusloc; + thread_args *args = (thread_args *) data; + int (SDLCALL * userfunc) (void *) = args->func; + void *userdata = args->data; + int *statusloc = &args->info->status; /* Perform any system-dependent setup - this function cannot fail, and cannot use SDL_SetError() */ - SDL_SYS_SetupThread(); + SDL_SYS_SetupThread(args->info->name); /* Get the thread id */ - args = (thread_args *) data; args->info->threadid = SDL_ThreadID(); - /* Figure out what function to run */ - userfunc = args->func; - userdata = args->data; - statusloc = &args->info->status; - /* Wake up the parent thread */ SDL_SemPost(args->wait); @@ -217,12 +211,14 @@ #ifdef SDL_PASSED_BEGINTHREAD_ENDTHREAD #undef SDL_CreateThread DECLSPEC SDL_Thread *SDLCALL -SDL_CreateThread(int (SDLCALL * fn) (void *), void *data, +SDL_CreateThread(int (SDLCALL * fn) (void *), + const char *name, void *data, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread) #else DECLSPEC SDL_Thread *SDLCALL -SDL_CreateThread(int (SDLCALL * fn) (void *), void *data) +SDL_CreateThread(int (SDLCALL * fn) (void *), + const char *name, void *data) #endif { SDL_Thread *thread; @@ -239,9 +235,20 @@ thread->status = -1; /* Set up the arguments for the thread */ + if (name != NULL) { + thread->name = SDL_strdup(name); + if (thread->name == NULL) { + SDL_OutOfMemory(); + SDL_free(thread); + return (NULL); + } + } + + /* Set up the arguments for the thread */ args = (thread_args *) SDL_malloc(sizeof(*args)); if (args == NULL) { SDL_OutOfMemory(); + SDL_free(thread->name); SDL_free(thread); return (NULL); } @@ -250,6 +257,7 @@ args->info = thread; args->wait = SDL_CreateSemaphore(0); if (args->wait == NULL) { + SDL_free(thread->name); SDL_free(thread); SDL_free(args); return (NULL); @@ -270,6 +278,7 @@ } else { /* Oops, failed. Gotta free everything */ SDL_DelThread(thread); + SDL_free(thread->name); SDL_free(thread); thread = NULL; } @@ -293,6 +302,12 @@ return id; } +const char * +SDL_GetThreadName(SDL_Thread * thread) +{ + return thread->name; +} + int SDL_SetThreadPriority(SDL_ThreadPriority priority) { @@ -308,6 +323,7 @@ *status = thread->status; } SDL_DelThread(thread); + SDL_free(thread->name); SDL_free(thread); } }