aboutsummaryrefslogtreecommitdiff
path: root/compat/win32/pthread.h
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2010-06-21 06:02:45 -0700
committerJunio C Hamano <gitster@pobox.com>2010-06-21 06:02:45 -0700
commit762655010d6f051f632a77b8c5b95b9f5cad02c9 (patch)
tree8f9b2d9a72a1e1af33eaa26fd94516391f23ad62 /compat/win32/pthread.h
parent8d676d85f772ce3a100b6f0dddd1c34a7e4313cf (diff)
parent3e333036ccbb97fddf54bd8fe74b12ba46f1687b (diff)
downloadgit-762655010d6f051f632a77b8c5b95b9f5cad02c9.tar.gz
git-762655010d6f051f632a77b8c5b95b9f5cad02c9.tar.xz
Merge branch 'js/async-thread'
* js/async-thread: fast-import: die_nicely() back to vsnprintf (reverts part of ebaa79f) Enable threaded async procedures whenever pthreads is available Dying in an async procedure should only exit the thread, not the process. Reimplement async procedures using pthreads Windows: more pthreads functions Fix signature of fcntl() compatibility dummy Make report() from usage.c public as vreportf() and use it. Modernize t5530-upload-pack-error. Conflicts: http-backend.c
Diffstat (limited to 'compat/win32/pthread.h')
-rw-r--r--compat/win32/pthread.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/compat/win32/pthread.h b/compat/win32/pthread.h
index a45f8d66d..2e2054855 100644
--- a/compat/win32/pthread.h
+++ b/compat/win32/pthread.h
@@ -58,6 +58,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,
@@ -71,4 +72,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 */