reworking thread exit code API to make it easier on win32
This commit is contained in:
parent
baab4036c4
commit
58210d1884
|
@ -32,7 +32,7 @@ enum
|
|||
|
||||
typedef struct mp_thread mp_thread;
|
||||
|
||||
typedef void* (*mp_thread_start_function)(void* userPointer);
|
||||
typedef i32 (*mp_thread_start_function)(void* userPointer);
|
||||
|
||||
mp_thread* mp_thread_create(mp_thread_start_function start, void* userPointer);
|
||||
mp_thread* mp_thread_create_with_name(mp_thread_start_function start, void* userPointer, const char* name);
|
||||
|
@ -43,7 +43,7 @@ u64 mp_thread_unique_id(mp_thread* thread);
|
|||
u64 mp_thread_self_id();
|
||||
|
||||
int mp_thread_signal(mp_thread* thread, int sig);
|
||||
int mp_thread_join(mp_thread* thread, void** ret);
|
||||
int mp_thread_join(mp_thread* thread, i64* exitCode);
|
||||
int mp_thread_detach(mp_thread* thread);
|
||||
|
||||
//---------------------------------------------------------------
|
||||
|
@ -57,7 +57,6 @@ int mp_mutex_destroy(mp_mutex* mutex);
|
|||
int mp_mutex_lock(mp_mutex* mutex);
|
||||
int mp_mutex_unlock(mp_mutex* mutex);
|
||||
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Lightweight ticket mutex API
|
||||
//---------------------------------------------------------------
|
||||
|
|
|
@ -23,14 +23,15 @@ struct mp_thread
|
|||
char name[MP_THREAD_NAME_MAX_SIZE];
|
||||
};
|
||||
|
||||
void* mp_thread_bootstrap(void* data)
|
||||
static void* mp_thread_bootstrap(void* data)
|
||||
{
|
||||
mp_thread* thread = (mp_thread*)data;
|
||||
if(strlen(thread->name))
|
||||
{
|
||||
pthread_setname_np(thread->name);
|
||||
}
|
||||
return(thread->start(thread->userPointer));
|
||||
i32 exitCode = thread->start(thread->userPointer);
|
||||
return((void*)exitCode);
|
||||
}
|
||||
|
||||
mp_thread* mp_thread_create_with_name(mp_thread_start_function start, void* userPointer, const char* name)
|
||||
|
@ -95,13 +96,19 @@ int mp_thread_signal(mp_thread* thread, int sig)
|
|||
return(pthread_kill(thread->pthread, sig));
|
||||
}
|
||||
|
||||
int mp_thread_join(mp_thread* thread, void** ret)
|
||||
int mp_thread_join(mp_thread* thread, i64* exitCode)
|
||||
{
|
||||
if(pthread_join(thread->pthread, ret))
|
||||
void* ret;
|
||||
if(pthread_join(thread->pthread, &ret))
|
||||
{
|
||||
return(-1);
|
||||
}
|
||||
free(thread);
|
||||
|
||||
if (exitCode)
|
||||
{
|
||||
*exitCode = (off_t)ret;
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
@ -156,6 +163,8 @@ int mp_mutex_unlock(mp_mutex* mutex)
|
|||
return(pthread_mutex_unlock(&mutex->pmutex));
|
||||
}
|
||||
|
||||
// mp_ticket_spin_mutex has a mirrored implementation in win32_thread.c
|
||||
|
||||
void mp_ticket_spin_mutex_init(mp_ticket_spin_mutex* mutex)
|
||||
{
|
||||
mutex->nextTicket = 0;
|
||||
|
|
Loading…
Reference in New Issue