[vlc-commits] vlc_fixup: Provide a thread_local macro

Hugo Beauzée-Luyssen git at videolan.org
Thu Jun 15 16:22:33 CEST 2017


vlc | branch: master | Hugo Beauzée-Luyssen <hugo at beauzee.fr> | Thu Jun 15 16:17:06 2017 +0200| [d0e2ad922ac987963d1889e3caa81053508ea9f9] | committer: Hugo Beauzée-Luyssen

vlc_fixup: Provide a thread_local macro

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d0e2ad922ac987963d1889e3caa81053508ea9f9
---

 configure.ac         | 11 +++++++++++
 include/vlc_fixups.h | 12 ++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/configure.ac b/configure.ac
index 43ce7a3e1a..95d960954d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -757,6 +757,17 @@ AC_CHECK_LIB(m,sincos, [
   AC_LIBOBJ([sincos])
 ])
 
+AC_MSG_CHECKING([_Thread_local support])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([_Thread_local int foo = 0;
+                   int main() {}])], [
+    AC_MSG_RESULT([ok])
+    AC_DEFINE(HAVE_THREAD_LOCAL, 1, [Defined to 1 if C11 _Thread_local storage qualifier is supported])
+],[ AC_MSG_RESULT([no])])
+
+dnl __STDC_NO_THREADS__ can't be trusted on some platforms.
+dnl check for its availability explicitely
+AC_CHECK_HEADERS([threads.h])
+
 dnl Check for dynamic plugins
 LIBDL=""
 have_dynamic_objects="no"
diff --git a/include/vlc_fixups.h b/include/vlc_fixups.h
index c49b4351b4..8bfb76888f 100644
--- a/include/vlc_fixups.h
+++ b/include/vlc_fixups.h
@@ -45,6 +45,18 @@
 # endif
 #endif
 
+#ifndef __cplusplus
+# ifdef HAVE_THREADS_H
+#  include <threads.h>
+# elif !defined(thread_local)
+#  ifdef HAVE_THREAD_LOCAL
+#   define thread_local _Thread_local
+#  elif defined(_MSC_VER)
+#   define thread_local __declspec(thread)
+#  endif
+# endif
+#endif
+
 #if !defined (HAVE_GMTIME_R) || !defined (HAVE_LOCALTIME_R) \
  || !defined (HAVE_TIMEGM)
 # include <time.h> /* time_t */



More information about the vlc-commits mailing list