summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2011-06-07 03:39:19 +0200
committerVicent Marti <tanoku@gmail.com>2011-06-07 03:39:19 +0200
commit340fc0d40ac03680d6f7964bc47f8c8d7fbbc57c (patch)
tree95e5e4a91503151e47190626a4f87f18ca845871
parent9d77d83a8108822bb8af49f13260e355a028e288 (diff)
downloadlibgit2-340fc0d40ac03680d6f7964bc47f8c8d7fbbc57c.tar.gz
threads: Cleanup TLS declarations
This time for good.
-rw-r--r--include/git2/thread-utils.h67
1 files changed, 37 insertions, 30 deletions
diff --git a/include/git2/thread-utils.h b/include/git2/thread-utils.h
index e26876bea..62e6199a4 100644
--- a/include/git2/thread-utils.h
+++ b/include/git2/thread-utils.h
@@ -31,41 +31,48 @@
* http://predef.sourceforge.net/precomp.html
*/
-#define GIT_HAS_TLS 1
+#ifdef GIT_THREADS
+# define GIT_HAS_TLS 1
-#if defined(__APPLE__) && defined(__MACH__)
-# undef GIT_TLS
-# define GIT_TLS
+/* No TLS in Cygwin */
+# if defined(__CHECKER__) || defined(__CYGWIN__)
+# undef GIT_HAS_TLS
+# define GIT_TLS
-#elif defined(__GNUC__) || \
- defined(__SUNPRO_C) || \
- defined(__SUNPRO_CC) || \
- defined(__xlc__) || \
- defined(__xlC__)
-# define GIT_TLS __thread
+/* No TLS in Mach binaries for Mac OS X */
+# elif defined(__APPLE__) && defined(__MACH__)
+# undef GIT_TLS
+# define GIT_TLS
-#elif defined(__INTEL_COMPILER)
-# if defined(_WIN32) || defined(_WIN32_CE)
-# define GIT_TLS __declspec(thread)
-# else
-# define GIT_TLS __thread
-# endif
+/* Normal TLS for GCC */
+# elif defined(__GNUC__) || \
+ defined(__SUNPRO_C) || \
+ defined(__SUNPRO_CC) || \
+ defined(__xlc__) || \
+ defined(__xlC__)
+# define GIT_TLS __thread
-#elif defined(_WIN32) || \
- defined(_WIN32_CE) || \
- defined(__BORLANDC__)
-# define GIT_TLS __declspec(thread)
+/* ICC may run on Windows or Linux */
+# elif defined(__INTEL_COMPILER)
+# if defined(_WIN32) || defined(_WIN32_CE)
+# define GIT_TLS __declspec(thread)
+# else
+# define GIT_TLS __thread
+# endif
-#else
-# undef GIT_HAS_TLS
-# define GIT_TLS /* nothing: tls vars are thread-global */
-#endif
+/* Declspec for MSVC in Win32 */
+# elif defined(_WIN32) || \
+ defined(_WIN32_CE) || \
+ defined(__BORLANDC__)
+# define GIT_TLS __declspec(thread)
-/* sparse and cygwin don't grok thread-local variables */
-#if defined(__CHECKER__) || defined(__CYGWIN__)
-# undef GIT_HAS_TLS
-# undef GIT_TLS
-# define GIT_TLS
-#endif
+/* Other platform; no TLS */
+# else
+# undef GIT_HAS_TLS
+# define GIT_TLS /* nothing: tls vars are thread-global */
+# endif
+#else /* Disable TLS if libgit2 is not threadsafe */
+# define GIT_TLS
+#endif /* GIT_THREADS */
#endif /* INCLUDE_git_thread_utils_h__ */