Commit 340fc0d40ac03680d6f7964bc47f8c8d7fbbc57c

Vicent Marti 2011-06-07T03:39:19

threads: Cleanup TLS declarations This time for good.

diff --git a/include/git2/thread-utils.h b/include/git2/thread-utils.h
index e26876b..62e6199 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__ */