From 340fc0d40ac03680d6f7964bc47f8c8d7fbbc57c Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Tue, 7 Jun 2011 03:39:19 +0200 Subject: [PATCH] threads: Cleanup TLS declarations This time for good. --- include/git2/thread-utils.h | 67 ++++++++++++++++++++----------------- 1 file 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__ */