aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ConfigureChecks.cmake14
-rw-r--r--config.h.cmake3
-rw-r--r--include/libssh/priv.h8
3 files changed, 25 insertions, 0 deletions
diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake
index b0485d98..f73fc567 100644
--- a/ConfigureChecks.cmake
+++ b/ConfigureChecks.cmake
@@ -165,6 +165,20 @@ if (CMAKE_HAVE_THREADS_LIBRARY)
endif (CMAKE_HAVE_THREADS_LIBRARY)
# OPTIONS
+check_c_source_compiles("
+__thread int tls;
+
+int main(void) {
+ return 0;
+}" HAVE_GCC_THREAD_LOCAL_STORAGE)
+
+check_c_source_compiles("
+__declspec(thread) int tls;
+
+int main(void) {
+ return 0;
+}" HAVE_MSC_THREAD_LOCAL_STORAGE)
+
if (WITH_DEBUG_CRYPTO)
set(DEBUG_CRYPTO 1)
endif (WITH_DEBUG_CRYPTO)
diff --git a/config.h.cmake b/config.h.cmake
index cea26f01..0c7c0acf 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -120,6 +120,9 @@
/**************************** OPTIONS ****************************/
+#cmakedefine HAVE_GCC_THREAD_LOCAL_STORAGE 1
+#cmakedefine HAVE_MSC_THREAD_LOCAL_STORAGE 1
+
/* Define to 1 if you want to enable GSSAPI */
#cmakedefine WITH_GSSAPI 1
diff --git a/include/libssh/priv.h b/include/libssh/priv.h
index 7168cf55..d7974026 100644
--- a/include/libssh/priv.h
+++ b/include/libssh/priv.h
@@ -130,6 +130,14 @@ int gettimeofday(struct timeval *__p, void *__t);
#endif
#endif
+#if defined(HAVE_GCC_THREAD_LOCAL_STORAGE)
+# define LIBSSH_THREAD __thread
+#elif defined(HAVE_MSC_THREAD_LOCAL_STORAGE)
+# define LIBSSH_THREAD __declspec(thread)
+#else
+# define LIBSSH_THREAD
+#endif
+
#define enter_function() (void)session
#define leave_function() (void)session