From 5fc72d28104dca5e9f2fb0d2bb047c7277a7999f Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Sun, 13 Sep 2015 15:05:59 +0200 Subject: [PATCH] [MSVC] correct support for thread-local storage --- include/xbt/base.h | 8 ++++++++ src/simix/smx_context.c | 7 ++----- tools/cmake/test_prog/prog_thread_storage.c | 7 ++++++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/include/xbt/base.h b/include/xbt/base.h index 69e69006e8..54ab2700e6 100644 --- a/include/xbt/base.h +++ b/include/xbt/base.h @@ -103,6 +103,14 @@ # define XBT_ALWAYS_INLINE XBT_INLINE #endif +#if defined(__GNUC__) +# define XBT_THREAD_LOCAL __thread +#elif defined(_MSC_VER) +# define XBT_THREAD_LOCAL __declspec(thread) +#else +# define XBT_THREAD_LOCAL No thread local on this architecture +#endif + /* improvable on gcc (by evaluating arguments only once), but wouldn't be portable */ #ifdef MIN # undef MIN diff --git a/src/simix/smx_context.c b/src/simix/smx_context.c index 9adeeac59e..e447ed3e98 100644 --- a/src/simix/smx_context.c +++ b/src/simix/smx_context.c @@ -18,6 +18,7 @@ #ifdef _WIN32 #include +#include #else #include #endif @@ -27,10 +28,6 @@ #define _aligned_free __mingw_aligned_free #endif //MINGW -#if defined(_XBT_WIN32) -#include -#endif - #ifdef HAVE_VALGRIND_VALGRIND_H # include #endif @@ -45,7 +42,7 @@ int smx_context_stack_size_was_set = 0; int smx_context_guard_size; int smx_context_guard_size_was_set = 0; #ifdef HAVE_THREAD_LOCAL_STORAGE -static __thread smx_context_t smx_current_context_parallel; +static XBT_THREAD_LOCAL smx_context_t smx_current_context_parallel; #else static xbt_os_thread_key_t smx_current_context_key = 0; #endif diff --git a/tools/cmake/test_prog/prog_thread_storage.c b/tools/cmake/test_prog/prog_thread_storage.c index 86d2940db7..edcab030ca 100644 --- a/tools/cmake/test_prog/prog_thread_storage.c +++ b/tools/cmake/test_prog/prog_thread_storage.c @@ -6,7 +6,12 @@ #include -__thread int thread_specific_variable = 0; +#ifdef _MSC_VER +__declspec(thread) +#else +__thread +#endif +int thread_specific_variable = 0; int main(void) { -- 2.20.1