[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