summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libsystemd-bus/sd-bus.c4
-rw-r--r--src/libsystemd-bus/sd-event.c2
-rw-r--r--src/libsystemd-id128/sd-id128.c8
-rw-r--r--src/login/logind-inhibit.c2
-rw-r--r--src/shared/capability.c4
-rw-r--r--src/shared/cgroup-util.c2
-rw-r--r--src/shared/macro.h12
-rw-r--r--src/shared/util.c6
-rw-r--r--src/shared/virt.c8
9 files changed, 30 insertions, 18 deletions
diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c
index 338ce0619d..9c564de764 100644
--- a/src/libsystemd-bus/sd-bus.c
+++ b/src/libsystemd-bus/sd-bus.c
@@ -2813,13 +2813,13 @@ static int bus_default(int (*bus_open)(sd_bus **), sd_bus **default_bus, sd_bus
}
_public_ int sd_bus_default_system(sd_bus **ret) {
- static __thread sd_bus *default_system_bus = NULL;
+ static thread_local sd_bus *default_system_bus = NULL;
return bus_default(sd_bus_open_system, &default_system_bus, ret);
}
_public_ int sd_bus_default_user(sd_bus **ret) {
- static __thread sd_bus *default_user_bus = NULL;
+ static thread_local sd_bus *default_user_bus = NULL;
return bus_default(sd_bus_open_user, &default_user_bus, ret);
}
diff --git a/src/libsystemd-bus/sd-event.c b/src/libsystemd-bus/sd-event.c
index 06c84d717a..727528bb3c 100644
--- a/src/libsystemd-bus/sd-event.c
+++ b/src/libsystemd-bus/sd-event.c
@@ -2116,7 +2116,7 @@ _public_ int sd_event_get_now_monotonic(sd_event *e, uint64_t *usec) {
_public_ int sd_event_default(sd_event **ret) {
- static __thread sd_event *default_event = NULL;
+ static thread_local sd_event *default_event = NULL;
sd_event *e;
int r;
diff --git a/src/libsystemd-id128/sd-id128.c b/src/libsystemd-id128/sd-id128.c
index 07d241534e..9ee40ab91e 100644
--- a/src/libsystemd-id128/sd-id128.c
+++ b/src/libsystemd-id128/sd-id128.c
@@ -104,8 +104,8 @@ static sd_id128_t make_v4_uuid(sd_id128_t id) {
}
_public_ int sd_id128_get_machine(sd_id128_t *ret) {
- static __thread sd_id128_t saved_machine_id;
- static __thread bool saved_machine_id_valid = false;
+ static thread_local sd_id128_t saved_machine_id;
+ static thread_local bool saved_machine_id_valid = false;
_cleanup_close_ int fd = -1;
char buf[33];
ssize_t k;
@@ -153,8 +153,8 @@ _public_ int sd_id128_get_machine(sd_id128_t *ret) {
}
_public_ int sd_id128_get_boot(sd_id128_t *ret) {
- static __thread sd_id128_t saved_boot_id;
- static __thread bool saved_boot_id_valid = false;
+ static thread_local sd_id128_t saved_boot_id;
+ static thread_local bool saved_boot_id_valid = false;
_cleanup_close_ int fd = -1;
char buf[36];
ssize_t k;
diff --git a/src/login/logind-inhibit.c b/src/login/logind-inhibit.c
index ec6a722ce3..042586d073 100644
--- a/src/login/logind-inhibit.c
+++ b/src/login/logind-inhibit.c
@@ -413,7 +413,7 @@ bool manager_is_inhibited(
}
const char *inhibit_what_to_string(InhibitWhat w) {
- static __thread char buffer[97];
+ static thread_local char buffer[97];
char *p;
if (w < 0 || w >= _INHIBIT_WHAT_MAX)
diff --git a/src/shared/capability.c b/src/shared/capability.c
index 321952067d..f34f6ba6f6 100644
--- a/src/shared/capability.c
+++ b/src/shared/capability.c
@@ -55,8 +55,8 @@ int have_effective_cap(int value) {
}
unsigned long cap_last_cap(void) {
- static __thread unsigned long saved;
- static __thread bool valid = false;
+ static thread_local unsigned long saved;
+ static thread_local bool valid = false;
unsigned long p;
if (valid)
diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c
index 2c2ffc5898..309f65d03e 100644
--- a/src/shared/cgroup-util.c
+++ b/src/shared/cgroup-util.c
@@ -480,7 +480,7 @@ static int join_path(const char *controller, const char *path, const char *suffi
int cg_get_path(const char *controller, const char *path, const char *suffix, char **fs) {
const char *p;
- static __thread bool good = false;
+ static thread_local bool good = false;
assert(fs);
diff --git a/src/shared/macro.h b/src/shared/macro.h
index fd3762eed4..2b5b3fdfe0 100644
--- a/src/shared/macro.h
+++ b/src/shared/macro.h
@@ -300,5 +300,17 @@ do { \
_found; \
})
+/* Define C11 thread_local attribute even on older compilers */
+#ifndef thread_local
+/*
+ * Don't break on glibc < 2.16 that doesn't define __STDC_NO_THREADS__
+ * see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53769
+ */
+#if __STDC_VERSION__ >= 201112L && !(defined(__STDC_NO_THREADS__) || (defined(__GNU_LIBRARY__) && __GLIBC__ == 2 && __GLIBC_MINOR__ < 16))
+#define thread_local _Thread_local
+#else
+#define thread_local __thread
+#endif
+#endif
#include "log.h"
diff --git a/src/shared/util.c b/src/shared/util.c
index cdc58e394f..f7335cf279 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -86,7 +86,7 @@ static volatile unsigned cached_columns = 0;
static volatile unsigned cached_lines = 0;
size_t page_size(void) {
- static __thread size_t pgsz = 0;
+ static thread_local size_t pgsz = 0;
long r;
if (_likely_(pgsz > 0))
@@ -4580,7 +4580,7 @@ char *strjoin(const char *x, ...) {
}
bool is_main_thread(void) {
- static __thread int cached = 0;
+ static thread_local int cached = 0;
if (_unlikely_(cached == 0))
cached = getpid() == gettid() ? 1 : -1;
@@ -4798,7 +4798,7 @@ static const char *const __signal_table[] = {
DEFINE_PRIVATE_STRING_TABLE_LOOKUP(__signal, int);
const char *signal_to_string(int signo) {
- static __thread char buf[sizeof("RTMIN+")-1 + DECIMAL_STR_MAX(int) + 1];
+ static thread_local char buf[sizeof("RTMIN+")-1 + DECIMAL_STR_MAX(int) + 1];
const char *name;
name = __signal_to_string(signo);
diff --git a/src/shared/virt.c b/src/shared/virt.c
index 4e18638bc9..c79d35db4d 100644
--- a/src/shared/virt.c
+++ b/src/shared/virt.c
@@ -150,8 +150,8 @@ static int detect_vm_dmi(const char **_id) {
/* Returns a short identifier for the various VM implementations */
int detect_vm(const char **id) {
_cleanup_free_ char *hvtype = NULL, *cpuinfo_contents = NULL;
- static __thread int cached_found = -1;
- static __thread const char *cached_id = NULL;
+ static thread_local int cached_found = -1;
+ static thread_local const char *cached_id = NULL;
const char *_id = NULL;
int r;
@@ -215,8 +215,8 @@ finish:
int detect_container(const char **id) {
- static __thread int cached_found = -1;
- static __thread const char *cached_id = NULL;
+ static thread_local int cached_found = -1;
+ static thread_local const char *cached_id = NULL;
_cleanup_free_ char *e = NULL;
const char *_id = NULL;