From 257fa09fd021f86205aef3faaa11a26c8a5849f0 Mon Sep 17 00:00:00 2001 From: Marco Wang Date: Wed, 6 Nov 2019 09:06:44 +0800 Subject: [PATCH] src/glog/logging.h.in: change counters' duration to thread_local TSan warns about a race in LOG_EVERY_N macros since the static integer counters are unsynchronized. Using mutexes would be an overkill in this case, while thread-local storage suffices. --- src/glog/logging.h.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/glog/logging.h.in b/src/glog/logging.h.in index 0ec46a167..33e484502 100644 --- a/src/glog/logging.h.in +++ b/src/glog/logging.h.in @@ -897,7 +897,7 @@ PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN((invocation) == -1)) \ #define LOG_OCCURRENCES_MOD_N LOG_EVERY_N_VARNAME(occurrences_mod_n_, __LINE__) #define SOME_KIND_OF_LOG_EVERY_N(severity, n, what_to_do) \ - static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ + thread_local int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ ++LOG_OCCURRENCES; \ if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \ if (LOG_OCCURRENCES_MOD_N == 1) \ @@ -906,7 +906,7 @@ PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN((invocation) == -1)) \ &what_to_do).stream() #define SOME_KIND_OF_LOG_IF_EVERY_N(severity, condition, n, what_to_do) \ - static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ + thread_local int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ ++LOG_OCCURRENCES; \ if (condition && \ ((LOG_OCCURRENCES_MOD_N=(LOG_OCCURRENCES_MOD_N + 1) % n) == (1 % n))) \ @@ -915,7 +915,7 @@ PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN((invocation) == -1)) \ &what_to_do).stream() #define SOME_KIND_OF_PLOG_EVERY_N(severity, n, what_to_do) \ - static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ + thread_local int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ ++LOG_OCCURRENCES; \ if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \ if (LOG_OCCURRENCES_MOD_N == 1) \ @@ -924,7 +924,7 @@ PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN((invocation) == -1)) \ &what_to_do).stream() #define SOME_KIND_OF_LOG_FIRST_N(severity, n, what_to_do) \ - static int LOG_OCCURRENCES = 0; \ + thread_local int LOG_OCCURRENCES = 0; \ if (LOG_OCCURRENCES <= n) \ ++LOG_OCCURRENCES; \ if (LOG_OCCURRENCES <= n) \