threads: split up OS-dependent mutex code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
diff --git a/src/thread-utils.h b/src/thread-utils.h
index 11c026f..29b5d1e 100644
--- a/src/thread-utils.h
+++ b/src/thread-utils.h
@@ -40,17 +40,12 @@ typedef git_atomic git_atomic_ssize;
#ifdef GIT_THREADS
-#if !defined(GIT_WIN32)
+#ifdef GIT_WIN32
+# include "win32/pthread.h"
+#else
# include "unix/pthread.h"
#endif
-/* Pthreads Mutex */
-#define git_mutex pthread_mutex_t
-#define git_mutex_init(a) pthread_mutex_init(a, NULL)
-#define git_mutex_lock(a) pthread_mutex_lock(a)
-#define git_mutex_unlock(a) pthread_mutex_unlock(a)
-#define git_mutex_free(a) pthread_mutex_destroy(a)
-
/* Pthreads condition vars */
#define git_cond pthread_cond_t
#define git_cond_init(c) pthread_cond_init(c, NULL)
diff --git a/src/unix/pthread.h b/src/unix/pthread.h
index 87384a4..7487cb5 100644
--- a/src/unix/pthread.h
+++ b/src/unix/pthread.h
@@ -17,4 +17,11 @@ typedef struct {
#define git_thread_join(git_thread_ptr, status) \
pthread_join((git_thread_ptr)->thread, status)
+/* Git Mutex */
+#define git_mutex pthread_mutex_t
+#define git_mutex_init(a) pthread_mutex_init(a, NULL)
+#define git_mutex_lock(a) pthread_mutex_lock(a)
+#define git_mutex_unlock(a) pthread_mutex_unlock(a)
+#define git_mutex_free(a) pthread_mutex_destroy(a)
+
#endif /* INCLUDE_unix_pthread_h__ */
diff --git a/src/win32/pthread.c b/src/win32/pthread.c
index d8ed4bb..142c1af 100644
--- a/src/win32/pthread.c
+++ b/src/win32/pthread.c
@@ -67,28 +67,25 @@ int git_thread_join(
return 0;
}
-int pthread_mutex_init(
- pthread_mutex_t *GIT_RESTRICT mutex,
- const pthread_mutexattr_t *GIT_RESTRICT mutexattr)
+int git_mutex_init(git_mutex *GIT_RESTRICT mutex)
{
- GIT_UNUSED(mutexattr);
InitializeCriticalSection(mutex);
return 0;
}
-int pthread_mutex_destroy(pthread_mutex_t *mutex)
+int git_mutex_free(git_mutex *mutex)
{
DeleteCriticalSection(mutex);
return 0;
}
-int pthread_mutex_lock(pthread_mutex_t *mutex)
+int git_mutex_lock(git_mutex *mutex)
{
EnterCriticalSection(mutex);
return 0;
}
-int pthread_mutex_unlock(pthread_mutex_t *mutex)
+int git_mutex_unlock(git_mutex *mutex)
{
LeaveCriticalSection(mutex);
return 0;
@@ -124,7 +121,7 @@ int pthread_cond_destroy(pthread_cond_t *cond)
return 0;
}
-int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
+int pthread_cond_wait(pthread_cond_t *cond, git_mutex *mutex)
{
int error;
DWORD wait_result;
@@ -133,7 +130,7 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
return EINVAL;
/* The caller must be holding the mutex. */
- error = pthread_mutex_unlock(mutex);
+ error = git_mutex_unlock(mutex);
if (error)
return error;
@@ -142,7 +139,7 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
assert(WAIT_OBJECT_0 == wait_result);
GIT_UNUSED(wait_result);
- return pthread_mutex_lock(mutex);
+ return git_mutex_lock(mutex);
}
int pthread_cond_signal(pthread_cond_t *cond)
diff --git a/src/win32/pthread.h b/src/win32/pthread.h
index fa99b01..3ff95e8 100644
--- a/src/win32/pthread.h
+++ b/src/win32/pthread.h
@@ -28,7 +28,7 @@ typedef int pthread_condattr_t;
typedef int pthread_attr_t;
typedef int pthread_rwlockattr_t;
-typedef CRITICAL_SECTION pthread_mutex_t;
+typedef CRITICAL_SECTION git_mutex;
typedef HANDLE pthread_cond_t;
typedef struct { void *Ptr; } GIT_SRWLOCK;
@@ -47,16 +47,14 @@ int git_thread_create(git_thread *GIT_RESTRICT,
void *GIT_RESTRICT);
int git_thread_join(git_thread *, void **);
-int pthread_mutex_init(
- pthread_mutex_t *GIT_RESTRICT mutex,
- const pthread_mutexattr_t *GIT_RESTRICT mutexattr);
-int pthread_mutex_destroy(pthread_mutex_t *);
-int pthread_mutex_lock(pthread_mutex_t *);
-int pthread_mutex_unlock(pthread_mutex_t *);
+int git_mutex_init(git_mutex *GIT_RESTRICT mutex);
+int git_mutex_free(git_mutex *);
+int git_mutex_lock(git_mutex *);
+int git_mutex_unlock(git_mutex *);
int pthread_cond_init(pthread_cond_t *, const pthread_condattr_t *);
int pthread_cond_destroy(pthread_cond_t *);
-int pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *);
+int pthread_cond_wait(pthread_cond_t *, git_mutex *);
int pthread_cond_signal(pthread_cond_t *);
/* pthread_cond_broadcast is not supported on Win32 yet. */