From 1b4e29b7f68ce80bb01fd878f6ddc6cf20819581 Mon Sep 17 00:00:00 2001 From: Philip Kelley Date: Sat, 7 Jun 2014 13:56:39 -0400 Subject: React to review feedback --- src/thread-utils.h | 21 ++++++++------------- src/win32/pthread.c | 9 +++++---- src/win32/pthread.h | 14 +++++++++++++- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/thread-utils.h b/src/thread-utils.h index 0cc7b04ad..daec14eeb 100644 --- a/src/thread-utils.h +++ b/src/thread-utils.h @@ -40,21 +40,16 @@ typedef git_atomic git_atomic_ssize; #ifdef GIT_THREADS -#if defined(GIT_WIN32) - -#define git_thread git_win32_thread -#define git_thread_create(thread, attr, start_routine, arg) \ - git_win32__thread_create(thread, attr, start_routine, arg) -#define git_thread_join(thread_ptr, status) \ - git_win32__thread_join(thread_ptr, status) +#if !defined(GIT_WIN32) -#else +typedef struct { + pthread_t thread; +} git_thread; -#define git_thread pthread_t -#define git_thread_create(thread, attr, start_routine, arg) \ - pthread_create(thread, attr, start_routine, arg) -#define git_thread_join(thread_ptr, status) \ - pthread_join(*(thread_ptr), status) +#define git_thread_create(git_thread_ptr, attr, start_routine, arg) \ + pthread_create(&(git_thread_ptr)->thread, attr, start_routine, arg) +#define git_thread_join(git_thread_ptr, status) \ + pthread_join((git_thread_ptr)->thread, status) #endif diff --git a/src/win32/pthread.c b/src/win32/pthread.c index b14b35621..ec45ecbe5 100644 --- a/src/win32/pthread.c +++ b/src/win32/pthread.c @@ -18,7 +18,7 @@ static DWORD WINAPI git_win32__threadproc(LPVOID lpParameter) { git_win32_thread *thread = lpParameter; - thread->value = thread->proc(thread->value); + thread->result = thread->proc(thread->param); return CLEAN_THREAD_EXIT; } @@ -31,7 +31,8 @@ int git_win32__thread_create( { GIT_UNUSED(attr); - thread->value = arg; + thread->result = NULL; + thread->param = arg; thread->proc = start_routine; thread->thread = CreateThread( NULL, 0, git_win32__threadproc, thread, 0, NULL); @@ -57,11 +58,11 @@ int git_win32__thread_join( * then we don't have a return value to give back to the caller. */ if (exit != CLEAN_THREAD_EXIT) { assert(false); - thread->value = NULL; + thread->result = NULL; } if (value_ptr) - *value_ptr = thread->value; + *value_ptr = thread->result; CloseHandle(thread->thread); return 0; diff --git a/src/win32/pthread.h b/src/win32/pthread.h index a15504ed5..e4826ca7f 100644 --- a/src/win32/pthread.h +++ b/src/win32/pthread.h @@ -19,7 +19,8 @@ typedef struct { HANDLE thread; void *(*proc)(void *); - void *value; + void *param; + void *result; } git_win32_thread; typedef int pthread_mutexattr_t; @@ -51,6 +52,17 @@ int git_win32__thread_join( git_win32_thread *, void **); +#ifdef GIT_THREADS + +typedef git_win32_thread git_thread; + +#define git_thread_create(git_thread_ptr, attr, start_routine, arg) \ + git_win32__thread_create(git_thread_ptr, attr, start_routine, arg) +#define git_thread_join(git_thread_ptr, status) \ + git_win32__thread_join(git_thread_ptr, status) + +#endif + int pthread_mutex_init( pthread_mutex_t *GIT_RESTRICT mutex, const pthread_mutexattr_t *GIT_RESTRICT mutexattr); -- cgit v1.2.1