summaryrefslogtreecommitdiff
path: root/compat/win32/pthread.h
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2010-06-21 13:02:45 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-06-21 13:02:45 (GMT)
commit762655010d6f051f632a77b8c5b95b9f5cad02c9 (patch)
tree8f9b2d9a72a1e1af33eaa26fd94516391f23ad62 /compat/win32/pthread.h
parent8d676d85f772ce3a100b6f0dddd1c34a7e4313cf (diff)
parent3e333036ccbb97fddf54bd8fe74b12ba46f1687b (diff)
downloadgit-762655010d6f051f632a77b8c5b95b9f5cad02c9.zip
git-762655010d6f051f632a77b8c5b95b9f5cad02c9.tar.gz
git-762655010d6f051f632a77b8c5b95b9f5cad02c9.tar.bz2
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 a45f8d6..2e20548 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 */