summaryrefslogtreecommitdiff
path: root/include/git2/thread-utils.h
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2011-06-07 03:22:32 +0200
committerVicent Marti <tanoku@gmail.com>2011-06-07 03:22:32 +0200
commit64fe8c62f90c6d887b2787f47ff815c2485e04d2 (patch)
tree0e00f4e8a7e64078935761c687ada156a2253b04 /include/git2/thread-utils.h
parent7d170a4b50b8e7721ff07956feb9a6463248b173 (diff)
downloadlibgit2-64fe8c62f90c6d887b2787f47ff815c2485e04d2.tar.gz
threads: Fix TLS declarations
Cleanup the thread-utils file. Do not define TLS if libgit2 is not threadsafe.
Diffstat (limited to 'include/git2/thread-utils.h')
-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__ */