summaryrefslogtreecommitdiff
path: root/src/win32/pthread.h
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2013-08-26 14:56:31 -0700
committerRussell Belfer <rb@github.com>2013-08-26 14:56:31 -0700
commit430953417f74dfcdbe030bafc069e1c07edceeb6 (patch)
treeb8276cc0ec5e481307202ec00ef7abcade6e9d98 /src/win32/pthread.h
parent44d655318661affa2feb51e9d6d533bb16d7f2b5 (diff)
downloadlibgit2-430953417f74dfcdbe030bafc069e1c07edceeb6.tar.gz
Load SRWLock APIs at runtime
This loads SRWLock APIs at runtime and in their absence (i.e. on Windows before Vista) falls back on a regular CRITICAL_SECTION that will not permit concurrent readers.
Diffstat (limited to 'src/win32/pthread.h')
-rw-r--r--src/win32/pthread.h14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/win32/pthread.h b/src/win32/pthread.h
index 50d836247..e84de471f 100644
--- a/src/win32/pthread.h
+++ b/src/win32/pthread.h
@@ -24,10 +24,17 @@ typedef int pthread_rwlockattr_t;
typedef CRITICAL_SECTION pthread_mutex_t;
typedef HANDLE pthread_t;
typedef HANDLE pthread_cond_t;
-typedef SRWLOCK pthread_rwlock_t;
+
+/* typedef struct { void *Ptr; } SRWLOCK; */
+
+typedef struct {
+ union {
+ SRWLOCK srwl;
+ CRITICAL_SECTION csec;
+ } native;
+} pthread_rwlock_t;
#define PTHREAD_MUTEX_INITIALIZER {(void*)-1}
-#define PTHREAD_RWLOCK_INITIALIZER SRWLOCK_INIT
int pthread_create(
pthread_t *GIT_RESTRICT thread,
@@ -61,4 +68,7 @@ int pthread_rwlock_wrlock(pthread_rwlock_t *);
int pthread_rwlock_wrunlock(pthread_rwlock_t *);
int pthread_rwlock_destroy(pthread_rwlock_t *);
+extern int win32_pthread_initialize(void);
+extern int win32_pthread_shutdown(void);
+
#endif