summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Kelley <phkelley@microsoft.com>2014-06-07 13:56:39 -0400
committerPhilip Kelley <phkelley@microsoft.com>2014-06-07 14:40:42 -0400
commit1b4e29b7f68ce80bb01fd878f6ddc6cf20819581 (patch)
tree84b41c3100b3ce52fbfee514891927a16f8594bb
parentfb5917679dd1cc0ee50d1d88893c07cbcd82471f (diff)
downloadlibgit2-1b4e29b7f68ce80bb01fd878f6ddc6cf20819581.tar.gz
React to review feedback
-rw-r--r--src/thread-utils.h21
-rw-r--r--src/win32/pthread.c9
-rw-r--r--src/win32/pthread.h14
3 files changed, 26 insertions, 18 deletions
diff --git a/src/thread-utils.h b/src/thread-utils.h
index 0cc7b04a..daec14ee 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 b14b3562..ec45ecbe 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 a15504ed..e4826ca7 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);