diff options
author | Patrick Steinhardt <ps@pks.im> | 2016-06-20 17:07:14 +0200 |
---|---|---|
committer | Carlos MartÃn Nieto <cmn@dwim.me> | 2016-10-01 17:40:38 +0200 |
commit | 40b243bf5a6c77e01306f447b4bef7642013b9dc (patch) | |
tree | 6fcb5ba1c9914f88f585083690b3f3e21da07019 | |
parent | fc2b97dd4ea19768bfa97e9391ebe8f1ab59aef4 (diff) | |
download | libgit2-40b243bf5a6c77e01306f447b4bef7642013b9dc.tar.gz |
threads: split up OS-dependent mutex code
-rw-r--r-- | src/thread-utils.h | 11 | ||||
-rw-r--r-- | src/unix/pthread.h | 7 | ||||
-rw-r--r-- | src/win32/pthread.c | 17 | ||||
-rw-r--r-- | src/win32/pthread.h | 14 |
4 files changed, 23 insertions, 26 deletions
diff --git a/src/thread-utils.h b/src/thread-utils.h index 11c026f33..29b5d1eee 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 87384a4ab..7487cb5c5 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 d8ed4bb1b..142c1afdf 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 fa99b01d6..3ff95e89b 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. */ |