Files
MINGW-packages/mingw-w64-git-git/0013-Remove-custom-pthread-layer.patch
2014-07-24 02:23:09 +01:00

267 lines
7.4 KiB
Diff

From b551d6199014c99982e121f4948bf1db7147ca1d Mon Sep 17 00:00:00 2001
From: martell <martellmalone@gmail.com>
Date: Thu, 24 Jul 2014 01:29:13 +0100
Subject: [PATCH 13/15] Remove custom pthread layer
---
compat/mingw.c | 5 +++
compat/win32/pthread-mingw.h | 104 +++++++++++++++++++++++++++++++++++++++++++
compat/win32/pthread.h | 104 -------------------------------------------
config.mak.uname | 2 +-
4 files changed, 110 insertions(+), 105 deletions(-)
create mode 100644 compat/win32/pthread-mingw.h
delete mode 100644 compat/win32/pthread.h
diff --git a/compat/mingw.c b/compat/mingw.c
index 69ea532..d21fc56 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1074,6 +1074,11 @@ int pipe(int filedes[2])
return 0;
}
+#ifdef __MINGW64_VERSION_MAJOR
+#undef gmtime_r
+#undef localtime_r
+#endif
+
struct tm *gmtime_r(const time_t *timep, struct tm *result)
{
/* gmtime() in MSVCRT.DLL is thread-safe, but not reentrant */
diff --git a/compat/win32/pthread-mingw.h b/compat/win32/pthread-mingw.h
new file mode 100644
index 0000000..8ad1873
--- /dev/null
+++ b/compat/win32/pthread-mingw.h
@@ -0,0 +1,104 @@
+/*
+ * Header used to adapt pthread-based POSIX code to Windows API threads.
+ *
+ * Copyright (C) 2009 Andrzej K. Haczewski <ahaczewski@gmail.com>
+ */
+
+#ifndef PTHREAD_H
+#define PTHREAD_H
+
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+
+#include <windows.h>
+
+/*
+ * Defines that adapt Windows API threads to pthreads API
+ */
+#define pthread_mutex_t CRITICAL_SECTION
+
+#define pthread_mutex_init(a,b) (InitializeCriticalSection((a)), 0)
+#define pthread_mutex_destroy(a) DeleteCriticalSection((a))
+#define pthread_mutex_lock EnterCriticalSection
+#define pthread_mutex_unlock LeaveCriticalSection
+
+typedef int pthread_mutexattr_t;
+#define pthread_mutexattr_init(a) (*(a) = 0)
+#define pthread_mutexattr_destroy(a) do {} while (0)
+#define pthread_mutexattr_settype(a, t) 0
+#define PTHREAD_MUTEX_RECURSIVE 0
+
+/*
+ * Implement simple condition variable for Windows threads, based on ACE
+ * implementation.
+ *
+ * See original implementation: http://bit.ly/1vkDjo
+ * ACE homepage: http://www.cse.wustl.edu/~schmidt/ACE.html
+ * See also: http://www.cse.wustl.edu/~schmidt/win32-cv-1.html
+ */
+typedef struct {
+ LONG waiters;
+ int was_broadcast;
+ CRITICAL_SECTION waiters_lock;
+ HANDLE sema;
+ HANDLE continue_broadcast;
+} pthread_cond_t;
+
+extern int pthread_cond_init(pthread_cond_t *cond, const void *unused);
+extern int pthread_cond_destroy(pthread_cond_t *cond);
+extern int pthread_cond_wait(pthread_cond_t *cond, CRITICAL_SECTION *mutex);
+extern int pthread_cond_signal(pthread_cond_t *cond);
+extern int pthread_cond_broadcast(pthread_cond_t *cond);
+
+/*
+ * Simple thread creation implementation using pthread API
+ */
+typedef struct {
+ HANDLE handle;
+ void *(*start_routine)(void*);
+ void *arg;
+ DWORD tid;
+} pthread_t;
+
+extern int pthread_create(pthread_t *thread, const void *unused,
+ void *(*start_routine)(void*), void *arg);
+
+/*
+ * To avoid the need of copying a struct, we use small macro wrapper to pass
+ * pointer to win32_pthread_join instead.
+ */
+#define pthread_join(a, b) win32_pthread_join(&(a), (b))
+
+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_key_delete(pthread_key_t key)
+{
+ return TlsFree(key) ? 0 : EINVAL;
+}
+
+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 */
diff --git a/compat/win32/pthread.h b/compat/win32/pthread.h
deleted file mode 100644
index 8ad1873..0000000
--- a/compat/win32/pthread.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Header used to adapt pthread-based POSIX code to Windows API threads.
- *
- * Copyright (C) 2009 Andrzej K. Haczewski <ahaczewski@gmail.com>
- */
-
-#ifndef PTHREAD_H
-#define PTHREAD_H
-
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-
-#include <windows.h>
-
-/*
- * Defines that adapt Windows API threads to pthreads API
- */
-#define pthread_mutex_t CRITICAL_SECTION
-
-#define pthread_mutex_init(a,b) (InitializeCriticalSection((a)), 0)
-#define pthread_mutex_destroy(a) DeleteCriticalSection((a))
-#define pthread_mutex_lock EnterCriticalSection
-#define pthread_mutex_unlock LeaveCriticalSection
-
-typedef int pthread_mutexattr_t;
-#define pthread_mutexattr_init(a) (*(a) = 0)
-#define pthread_mutexattr_destroy(a) do {} while (0)
-#define pthread_mutexattr_settype(a, t) 0
-#define PTHREAD_MUTEX_RECURSIVE 0
-
-/*
- * Implement simple condition variable for Windows threads, based on ACE
- * implementation.
- *
- * See original implementation: http://bit.ly/1vkDjo
- * ACE homepage: http://www.cse.wustl.edu/~schmidt/ACE.html
- * See also: http://www.cse.wustl.edu/~schmidt/win32-cv-1.html
- */
-typedef struct {
- LONG waiters;
- int was_broadcast;
- CRITICAL_SECTION waiters_lock;
- HANDLE sema;
- HANDLE continue_broadcast;
-} pthread_cond_t;
-
-extern int pthread_cond_init(pthread_cond_t *cond, const void *unused);
-extern int pthread_cond_destroy(pthread_cond_t *cond);
-extern int pthread_cond_wait(pthread_cond_t *cond, CRITICAL_SECTION *mutex);
-extern int pthread_cond_signal(pthread_cond_t *cond);
-extern int pthread_cond_broadcast(pthread_cond_t *cond);
-
-/*
- * Simple thread creation implementation using pthread API
- */
-typedef struct {
- HANDLE handle;
- void *(*start_routine)(void*);
- void *arg;
- DWORD tid;
-} pthread_t;
-
-extern int pthread_create(pthread_t *thread, const void *unused,
- void *(*start_routine)(void*), void *arg);
-
-/*
- * To avoid the need of copying a struct, we use small macro wrapper to pass
- * pointer to win32_pthread_join instead.
- */
-#define pthread_join(a, b) win32_pthread_join(&(a), (b))
-
-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_key_delete(pthread_key_t key)
-{
- return TlsFree(key) ? 0 : EINVAL;
-}
-
-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 */
diff --git a/config.mak.uname b/config.mak.uname
index cef8974..acd4f19 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -505,7 +505,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))
endif
COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
COMPAT_OBJS += compat/mingw.o compat/winansi.o \
- compat/win32/pthread.o compat/win32/syslog.o \
+ compat/win32/syslog.o \
compat/win32/dirent.o compat/win32/fscache.o
SOCKET_LIB = -lws2_32
GITLIBS += git.res
--
2.0.1