aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCory Fields <cory-nospam-@coryfields.com>2017-11-27 17:08:27 -0500
committerThomas Snider <tjps636@gmail.com>2017-11-27 15:01:47 -0800
commitf7f7e2cd340c088e82d09090eb275b98b34a9812 (patch)
tree7e9e439fd4c9b6c61e53bcf561ae3005f9101367
parentbba9bd0d9dd06f13a6b0c89181864453cab5c858 (diff)
threads: add a thread_local autoconf check
-rw-r--r--configure.ac22
-rw-r--r--src/sync.cpp3
2 files changed, 25 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index 8e5561243a..a05896edea 100644
--- a/configure.ac
+++ b/configure.ac
@@ -659,6 +659,28 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([
]
)
+TEMP_LDFLAGS="$LDFLAGS"
+LDFLAGS="$TEMP_LDFLAGS $PTHREAD_CFLAGS"
+AC_MSG_CHECKING([for thread_local support])
+AC_LINK_IFELSE([AC_LANG_SOURCE([
+ #include <thread>
+ static thread_local int foo = 0;
+ static void run_thread() { foo++;}
+ int main(){
+ for(int i = 0; i < 10; i++) { std::thread(run_thread).detach();}
+ return foo;
+ }
+ ])],
+ [
+ AC_DEFINE(HAVE_THREAD_LOCAL,1,[Define if thread_local is supported.])
+ AC_MSG_RESULT(yes)
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ]
+)
+LDFLAGS="$TEMP_LDFLAGS"
+
# Check for different ways of gathering OS randomness
AC_MSG_CHECKING(for Linux getrandom syscall)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
diff --git a/src/sync.cpp b/src/sync.cpp
index 116533eb41..3f51383ea2 100644
--- a/src/sync.cpp
+++ b/src/sync.cpp
@@ -11,6 +11,9 @@
#include <stdio.h>
#ifdef DEBUG_LOCKCONTENTION
+#if !defined(HAVE_THREAD_LOCAL)
+static_assert(false, "thread_local is not supported");
+#endif
void PrintLockContention(const char* pszName, const char* pszFile, int nLine)
{
LogPrintf("LOCKCONTENTION: %s\n", pszName);