From: Christian Brauner Date: Mon, 29 Mar 2021 13:42:54 +0000 (+0200) Subject: compiler: fix thread_local detection X-Git-Tag: lxc-5.0.0~230^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=448439729d091f428101288fb04d7e90d2e61ef8;p=thirdparty%2Flxc.git compiler: fix thread_local detection Signed-off-by: Christian Brauner --- diff --git a/configure.ac b/configure.ac index 76f2e1026..b329b4ea7 100644 --- a/configure.ac +++ b/configure.ac @@ -629,7 +629,7 @@ AC_CHECK_DECLS([PR_SET_NO_NEW_PRIVS], [], [], [#include ]) AC_CHECK_DECLS([PR_GET_NO_NEW_PRIVS], [], [], [#include ]) # Check for some headers -AC_CHECK_HEADERS([pty.h sys/memfd.h sys/personality.h sys/resource.h sys/signalfd.h sys/timerfd.h utmpx.h threads.h]) +AC_CHECK_HEADERS([pty.h sys/memfd.h sys/personality.h sys/resource.h sys/signalfd.h sys/timerfd.h utmpx.h]) AC_CHECK_HEADER([ifaddrs.h], AM_CONDITIONAL(HAVE_IFADDRS_H, true) diff --git a/src/lxc/compiler.h b/src/lxc/compiler.h index 353677a5e..5d45955d0 100644 --- a/src/lxc/compiler.h +++ b/src/lxc/compiler.h @@ -12,23 +12,14 @@ #include "config.h" -#if defined(HAVE_THREADS_H) - #include - #define THREAD_LOCAL_STORAGE_SUPPORTED -#elif defined(thread_local) - #define THREAD_LOCAL_STORAGE_SUPPORTED +#ifndef thread_local +#if __STDC_VERSION__ >= 201112L && \ + !(defined(__STDC_NO_THREADS__) || \ + (defined(__GNU_LIBRARY__) && __GLIBC__ == 2 && __GLIBC_MINOR__ < 16)) +#define thread_local _Thread_local #else - #if __STDC_VERSION__ >= 201112L && \ - !(defined(__STDC_NO_THREADS__) || \ - (defined(__GNU_LIBRARY__) && __GLIBC__ == 2 && __GLIBC_MINOR__ < 16)) - #define thread_local _Thread_local - - #define THREAD_LOCAL_STORAGE_SUPPORTED - #else - #define thread_local __thread - - #define THREAD_LOCAL_STORAGE_SUPPORTED - #endif +#define thread_local __thread +#endif #endif #if __GNUC__ >= 7 diff --git a/src/lxc/conf.c b/src/lxc/conf.c index bceb2cebc..37bf28d34 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -104,13 +104,7 @@ lxc_log_define(conf, lxc); * The lxc_conf of the container currently being worked on in an API call. * This is used in the error calls. */ -#if defined(THREAD_LOCAL_STORAGE_SUPPORTED) thread_local struct lxc_conf *current_config; -#elif defined(ENFORCE_THREAD_SAFETY) -#error ENFORCE_THREAD_SAFETY was set but cannot be guaranteed due to missing TLS -#else -struct lxc_conf *current_config; -#endif char *lxchook_names[NUM_LXC_HOOKS] = { "pre-start", diff --git a/src/lxc/conf.h b/src/lxc/conf.h index 939e47d75..2824c8719 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h @@ -474,13 +474,7 @@ struct lxc_conf { __hidden extern int write_id_mapping(enum idtype idtype, pid_t pid, const char *buf, size_t buf_size) __access_r(3, 4); -#if defined(THREAD_LOCAL_STORAGE_SUPPORTED) extern thread_local struct lxc_conf *current_config; -#elif defined(ENFORCE_THREAD_SAFETY) -#error ENFORCE_THREAD_SAFETY was set but cannot be guaranteed due to missing TLS -#else -struct lxc_conf *current_config; -#endif __hidden extern int run_lxc_hooks(const char *name, char *hook, struct lxc_conf *conf, char *argv[]); __hidden extern struct lxc_conf *lxc_conf_init(void); diff --git a/src/lxc/initutils.c b/src/lxc/initutils.c index c6206bff5..969d2052f 100644 --- a/src/lxc/initutils.c +++ b/src/lxc/initutils.c @@ -54,13 +54,7 @@ const char *lxc_global_config_value(const char *option_name) }; /* placed in the thread local storage pool for non-bionic targets */ -#if defined(THREAD_LOCAL_STORAGE_SUPPORTED) static thread_local const char *values[sizeof(options) / sizeof(options[0])] = {0}; -#elif defined(ENFORCE_THREAD_SAFETY) - #error ENFORCE_THREAD_SAFETY was set but cannot be guaranteed due to missing TLS -#else - static const char *values[sizeof(options) / sizeof(options[0])] = {0}; -#endif /* user_config_path is freed as soon as it is used */ char *user_config_path = NULL;