From 912b26324dbc1eb9500e49c90d271a330cbcb30b Mon Sep 17 00:00:00 2001 From: Johannes Sixt Date: Sat, 6 Mar 2010 16:40:41 +0100 Subject: Windows: more pthreads functions This adds: pthread_self pthread_equal pthread_exit pthread_key_create pthread_setspecific pthread_getspecific Signed-off-by: Johannes Sixt Signed-off-by: Junio C Hamano --- compat/win32/pthread.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'compat/win32/pthread.h') diff --git a/compat/win32/pthread.h b/compat/win32/pthread.h index c72f100f40..c7b8241b79 100644 --- a/compat/win32/pthread.h +++ b/compat/win32/pthread.h @@ -52,6 +52,7 @@ typedef struct { HANDLE handle; void *(*start_routine)(void*); void *arg; + DWORD tid; } pthread_t; extern int pthread_create(pthread_t *thread, const void *unused, @@ -65,4 +66,28 @@ extern int pthread_create(pthread_t *thread, const void *unused, extern int win32_pthread_join(pthread_t *thread, void **value_ptr); +#define pthread_equal(t1, t2) ((t1).tid == (t2).tid) +extern pthread_t pthread_self(void); + +static inline int pthread_exit(void *ret) +{ + ExitThread((DWORD)ret); +} + +typedef DWORD pthread_key_t; +static inline int pthread_key_create(pthread_key_t *keyp, void (*destructor)(void *value)) +{ + return (*keyp = TlsAlloc()) == TLS_OUT_OF_INDEXES ? EAGAIN : 0; +} + +static inline int pthread_setspecific(pthread_key_t key, const void *value) +{ + return TlsSetValue(key, (void *)value) ? 0 : EINVAL; +} + +static inline void *pthread_getspecific(pthread_key_t key) +{ + return TlsGetValue(key); +} + #endif /* PTHREAD_H */ -- cgit v1.2.3