Commit fabd4771 by Patrick Steinhardt Committed by Carlos Martín Nieto

threads: split up OS-dependent thread-condition code

parent 1b825316
...@@ -46,13 +46,6 @@ typedef git_atomic git_atomic_ssize; ...@@ -46,13 +46,6 @@ typedef git_atomic git_atomic_ssize;
# include "unix/pthread.h" # include "unix/pthread.h"
#endif #endif
/* Pthreads condition vars */
#define git_cond pthread_cond_t
#define git_cond_init(c) pthread_cond_init(c, NULL)
#define git_cond_free(c) pthread_cond_destroy(c)
#define git_cond_wait(c, l) pthread_cond_wait(c, l)
#define git_cond_signal(c) pthread_cond_signal(c)
/* Pthread (-ish) rwlock /* Pthread (-ish) rwlock
* *
* This differs from normal pthreads rwlocks in two ways: * This differs from normal pthreads rwlocks in two ways:
......
...@@ -24,4 +24,12 @@ typedef struct { ...@@ -24,4 +24,12 @@ typedef struct {
#define git_mutex_unlock(a) pthread_mutex_unlock(a) #define git_mutex_unlock(a) pthread_mutex_unlock(a)
#define git_mutex_free(a) pthread_mutex_destroy(a) #define git_mutex_free(a) pthread_mutex_destroy(a)
/* Git condition vars */
#define git_cond pthread_cond_t
#define git_cond_init(c) pthread_cond_init(c, NULL)
#define git_cond_free(c) pthread_cond_destroy(c)
#define git_cond_wait(c, l) pthread_cond_wait(c, l)
#define git_cond_signal(c) pthread_cond_signal(c)
#define git_cond_broadcast(c) pthread_cond_broadcast(c)
#endif /* INCLUDE_unix_pthread_h__ */ #endif /* INCLUDE_unix_pthread_h__ */
...@@ -91,12 +91,8 @@ int git_mutex_unlock(git_mutex *mutex) ...@@ -91,12 +91,8 @@ int git_mutex_unlock(git_mutex *mutex)
return 0; return 0;
} }
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) int git_cond_init(git_cond *cond)
{ {
/* We don't support non-default attributes. */
if (attr)
return EINVAL;
/* This is an auto-reset event. */ /* This is an auto-reset event. */
*cond = CreateEventW(NULL, FALSE, FALSE, NULL); *cond = CreateEventW(NULL, FALSE, FALSE, NULL);
assert(*cond); assert(*cond);
...@@ -106,7 +102,7 @@ int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) ...@@ -106,7 +102,7 @@ int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
return *cond ? 0 : ENOMEM; return *cond ? 0 : ENOMEM;
} }
int pthread_cond_destroy(pthread_cond_t *cond) int git_cond_free(git_cond *cond)
{ {
BOOL closed; BOOL closed;
...@@ -121,7 +117,7 @@ int pthread_cond_destroy(pthread_cond_t *cond) ...@@ -121,7 +117,7 @@ int pthread_cond_destroy(pthread_cond_t *cond)
return 0; return 0;
} }
int pthread_cond_wait(pthread_cond_t *cond, git_mutex *mutex) int git_cond_wait(git_cond *cond, git_mutex *mutex)
{ {
int error; int error;
DWORD wait_result; DWORD wait_result;
...@@ -142,7 +138,7 @@ int pthread_cond_wait(pthread_cond_t *cond, git_mutex *mutex) ...@@ -142,7 +138,7 @@ int pthread_cond_wait(pthread_cond_t *cond, git_mutex *mutex)
return git_mutex_lock(mutex); return git_mutex_lock(mutex);
} }
int pthread_cond_signal(pthread_cond_t *cond) int git_cond_signal(git_cond *cond)
{ {
BOOL signaled; BOOL signaled;
......
...@@ -29,7 +29,7 @@ typedef int pthread_attr_t; ...@@ -29,7 +29,7 @@ typedef int pthread_attr_t;
typedef int pthread_rwlockattr_t; typedef int pthread_rwlockattr_t;
typedef CRITICAL_SECTION git_mutex; typedef CRITICAL_SECTION git_mutex;
typedef HANDLE pthread_cond_t; typedef HANDLE git_cond;
typedef struct { void *Ptr; } GIT_SRWLOCK; typedef struct { void *Ptr; } GIT_SRWLOCK;
...@@ -52,10 +52,10 @@ int git_mutex_free(git_mutex *); ...@@ -52,10 +52,10 @@ int git_mutex_free(git_mutex *);
int git_mutex_lock(git_mutex *); int git_mutex_lock(git_mutex *);
int git_mutex_unlock(git_mutex *); int git_mutex_unlock(git_mutex *);
int pthread_cond_init(pthread_cond_t *, const pthread_condattr_t *); int git_cond_init(git_cond *);
int pthread_cond_destroy(pthread_cond_t *); int git_cond_free(git_cond *);
int pthread_cond_wait(pthread_cond_t *, git_mutex *); int git_cond_wait(git_cond *, git_mutex *);
int pthread_cond_signal(pthread_cond_t *); int git_cond_signal(git_cond *);
int pthread_num_processors_np(void); int pthread_num_processors_np(void);
......
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