Commit 1b4e29b7 by Philip Kelley

React to review feedback

parent fb591767
...@@ -40,21 +40,16 @@ typedef git_atomic git_atomic_ssize; ...@@ -40,21 +40,16 @@ typedef git_atomic git_atomic_ssize;
#ifdef GIT_THREADS #ifdef GIT_THREADS
#if defined(GIT_WIN32) #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)
#else typedef struct {
pthread_t thread;
} git_thread;
#define git_thread pthread_t #define git_thread_create(git_thread_ptr, attr, start_routine, arg) \
#define git_thread_create(thread, attr, start_routine, arg) \ pthread_create(&(git_thread_ptr)->thread, attr, start_routine, arg)
pthread_create(thread, attr, start_routine, arg) #define git_thread_join(git_thread_ptr, status) \
#define git_thread_join(thread_ptr, status) \ pthread_join((git_thread_ptr)->thread, status)
pthread_join(*(thread_ptr), status)
#endif #endif
......
...@@ -18,7 +18,7 @@ static DWORD WINAPI git_win32__threadproc(LPVOID lpParameter) ...@@ -18,7 +18,7 @@ static DWORD WINAPI git_win32__threadproc(LPVOID lpParameter)
{ {
git_win32_thread *thread = lpParameter; git_win32_thread *thread = lpParameter;
thread->value = thread->proc(thread->value); thread->result = thread->proc(thread->param);
return CLEAN_THREAD_EXIT; return CLEAN_THREAD_EXIT;
} }
...@@ -31,7 +31,8 @@ int git_win32__thread_create( ...@@ -31,7 +31,8 @@ int git_win32__thread_create(
{ {
GIT_UNUSED(attr); GIT_UNUSED(attr);
thread->value = arg; thread->result = NULL;
thread->param = arg;
thread->proc = start_routine; thread->proc = start_routine;
thread->thread = CreateThread( thread->thread = CreateThread(
NULL, 0, git_win32__threadproc, thread, 0, NULL); NULL, 0, git_win32__threadproc, thread, 0, NULL);
...@@ -57,11 +58,11 @@ int git_win32__thread_join( ...@@ -57,11 +58,11 @@ int git_win32__thread_join(
* then we don't have a return value to give back to the caller. */ * then we don't have a return value to give back to the caller. */
if (exit != CLEAN_THREAD_EXIT) { if (exit != CLEAN_THREAD_EXIT) {
assert(false); assert(false);
thread->value = NULL; thread->result = NULL;
} }
if (value_ptr) if (value_ptr)
*value_ptr = thread->value; *value_ptr = thread->result;
CloseHandle(thread->thread); CloseHandle(thread->thread);
return 0; return 0;
......
...@@ -19,7 +19,8 @@ ...@@ -19,7 +19,8 @@
typedef struct { typedef struct {
HANDLE thread; HANDLE thread;
void *(*proc)(void *); void *(*proc)(void *);
void *value; void *param;
void *result;
} git_win32_thread; } git_win32_thread;
typedef int pthread_mutexattr_t; typedef int pthread_mutexattr_t;
...@@ -51,6 +52,17 @@ int git_win32__thread_join( ...@@ -51,6 +52,17 @@ int git_win32__thread_join(
git_win32_thread *, git_win32_thread *,
void **); 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( int pthread_mutex_init(
pthread_mutex_t *GIT_RESTRICT mutex, pthread_mutex_t *GIT_RESTRICT mutex,
const pthread_mutexattr_t *GIT_RESTRICT mutexattr); const pthread_mutexattr_t *GIT_RESTRICT mutexattr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment