summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-cpp/glog/files')
-rw-r--r--dev-cpp/glog/files/glog-0.3.2-avoid-inline-asm.patch56
-rw-r--r--dev-cpp/glog/files/glog-0.3.4-fix-build-system.patch142
-rw-r--r--dev-cpp/glog/files/glog-0.3.4-fix-gcc5-demangling.patch56
-rw-r--r--dev-cpp/glog/files/glog-0.5.0-IsGoogleLoggingInitialized_public.patch106
-rw-r--r--dev-cpp/glog/files/glog-0.5.0-vmodule_levels_changeability.patch171
5 files changed, 277 insertions, 254 deletions
diff --git a/dev-cpp/glog/files/glog-0.3.2-avoid-inline-asm.patch b/dev-cpp/glog/files/glog-0.3.2-avoid-inline-asm.patch
deleted file mode 100644
index b6fa9cdb7374..000000000000
--- a/dev-cpp/glog/files/glog-0.3.2-avoid-inline-asm.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-http://code.google.com/p/google-glog/issues/detail?id=130
-
-make the code work with all gcc targets
-
---- a/src/symbolize_unittest.cc
-+++ b/src/symbolize_unittest.cc
-@@ -60,9 +60,7 @@ using namespace GOOGLE_NAMESPACE;
- # endif // __i386__
- # else
- # endif // __GNUC__ >= 4
--# if defined(__i386__) || defined(__x86_64__)
--# define TEST_X86_32_AND_64 1
--# endif // defined(__i386__) || defined(__x86_64__)
-+# define TEST_WITH_LABEL_ADDRESSES
- #endif
-
- // A wrapper function for Symbolize() to make the unit test simple.
-@@ -289,22 +287,24 @@ TEST(Symbolize, SymbolizeWithDemanglingStackConsumption) {
- extern "C" {
- inline void* always_inline inline_func() {
- register void *pc = NULL;
--#ifdef TEST_X86_32_AND_64
-- __asm__ __volatile__("call 1f; 1: pop %0" : "=r"(pc));
-+#ifdef TEST_WITH_LABEL_ADDRESSES
-+ pc = &&curr_pc;
-+ curr_pc:
- #endif
- return pc;
- }
-
- void* ATTRIBUTE_NOINLINE non_inline_func() {
- register void *pc = NULL;
--#ifdef TEST_X86_32_AND_64
-- __asm__ __volatile__("call 1f; 1: pop %0" : "=r"(pc));
-+#ifdef TEST_WITH_LABEL_ADDRESSES
-+ pc = &&curr_pc;
-+ curr_pc:
- #endif
- return pc;
- }
-
- void ATTRIBUTE_NOINLINE TestWithPCInsideNonInlineFunction() {
--#if defined(TEST_X86_32_AND_64) && defined(HAVE_ATTRIBUTE_NOINLINE)
-+#if defined(TEST_WITH_LABEL_ADDRESSES) && defined(HAVE_ATTRIBUTE_NOINLINE)
- void *pc = non_inline_func();
- const char *symbol = TrySymbolize(pc);
- CHECK(symbol != NULL);
-@@ -314,7 +314,7 @@ void ATTRIBUTE_NOINLINE TestWithPCInsideNonInlineFunction() {
- }
-
- void ATTRIBUTE_NOINLINE TestWithPCInsideInlineFunction() {
--#if defined(TEST_X86_32_AND_64) && defined(HAVE_ALWAYS_INLINE)
-+#if defined(TEST_WITH_LABEL_ADDRESSES) && defined(HAVE_ALWAYS_INLINE)
- void *pc = inline_func(); // Must be inlined.
- const char *symbol = TrySymbolize(pc);
- CHECK(symbol != NULL);
diff --git a/dev-cpp/glog/files/glog-0.3.4-fix-build-system.patch b/dev-cpp/glog/files/glog-0.3.4-fix-build-system.patch
deleted file mode 100644
index cd38111bc81f..000000000000
--- a/dev-cpp/glog/files/glog-0.3.4-fix-build-system.patch
+++ /dev/null
@@ -1,142 +0,0 @@
---- a/configure.ac
-+++ b/configure.ac
-@@ -11,7 +11,7 @@
- AC_CONFIG_SRCDIR(README)
- AC_CONFIG_MACRO_DIR([m4])
- AM_INIT_AUTOMAKE
--AM_CONFIG_HEADER(src/config.h)
-+AC_CONFIG_HEADERS([src/config.h])
-
- AC_LANG(C++)
-
-@@ -21,7 +21,7 @@
- AC_PROG_CXX
- AM_CONDITIONAL(GCC, test "$GCC" = yes) # let the Makefile know if we're gcc
-
--AC_PROG_LIBTOOL
-+LT_INIT
- AC_SUBST(LIBTOOL_DEPS)
-
- # Check whether some low-level functions/files are available
-@@ -128,32 +128,48 @@
- fi
-
- # Check if there is google-gflags library installed.
--SAVE_CFLAGS="$CFLAGS"
--SAVE_LIBS="$LIBS"
--AC_ARG_WITH(gflags, AS_HELP_STRING[--with-gflags=GFLAGS_DIR],
-- GFLAGS_CFLAGS="-I${with_gflags}/include"
-- GFLAGS_LIBS="-L${with_gflags}/lib -lgflags"
-- CFLAGS="$CFLAGS $GFLAGS_CFLAGS"
-- LIBS="$LIBS $GFLAGS_LIBS"
--)
--AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=1, ac_cv_have_libgflags=0)
--if test x"$ac_cv_have_libgflags" = x"1"; then
-- AC_DEFINE(HAVE_LIB_GFLAGS, 1, [define if you have google gflags library])
-- if test x"$GFLAGS_LIBS" = x""; then
-- GFLAGS_LIBS="-lgflags"
-- fi
--else
-- GFLAGS_CFLAGS=
-- GFLAGS_LIBS=
--fi
--CFLAGS="$SAVE_CFLAGS"
--LIBS="$SAVE_LIBS"
-+AC_ARG_ENABLE([gflags],
-+ AS_HELP_STRING([--enable-gflags], [Enable google-gflags]))
-+
-+ac_cv_have_libgflags=0
-+AS_IF([test "x$enable_gflags" != "xno"], [
-+ SAVE_CFLAGS="$CFLAGS"
-+ SAVE_LIBS="$LIBS"
-+ AC_ARG_WITH([gflags], AS_HELP_STRING([--with-gflags=GFLAGS_DIR]),[
-+ GFLAGS_CFLAGS="-I${with_gflags}/include"
-+ GFLAGS_LIBS="-L${with_gflags}/lib -lgflags"
-+ CFLAGS="$CFLAGS $GFLAGS_CFLAGS"
-+ LIBS="$LIBS $GFLAGS_LIBS"
-+ ])
-+
-+ AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=1, ac_cv_have_libgflags=0)
-+ CFLAGS="$SAVE_CFLAGS"
-+ LIBS="$SAVE_LIBS"
-+])
-+
-+AS_IF([test "x$ac_cv_have_libgflags" = "x1"], [
-+ AC_DEFINE([HAVE_LIB_GFLAGS], [1], [define if you have google gflags library])
-+ AS_IF([test "x$GFLAGS_LIBS" = "x"], [
-+ GFLAGS_LIBS="-lgflags"
-+ ])
-+], [
-+ GFLAGS_CFLAGS=
-+ GFLAGS_LIBS=
-+])
-
- # TODO(hamaji): Use official m4 macros provided by testing libraries
- # once the m4 macro of Google Mocking becomes ready.
- # Check if there is Google Test library installed.
--AC_CHECK_PROG(GTEST_CONFIG, gtest-config, "yes")
--AC_CHECK_LIB(gtest, main, have_gtest_lib="yes")
-+AC_ARG_ENABLE([gtest-config],
-+ AS_HELP_STRING([--enable-gtest-config], [Enable looking for gtest-config]))
-+
-+AS_IF([test "x$enable_gtest_config" != "xno"], [
-+ AC_CHECK_PROG(GTEST_CONFIG, gtest-config, "yes")
-+ AC_CHECK_LIB(gtest, main, have_gtest_lib="yes")
-+], [
-+ have_gtest_lib="no"
-+])
-+
- if test x"$GTEST_CONFIG" = "xyes" -a x"$have_gtest_lib" = "xyes"; then
- GTEST_CFLAGS=`gtest-config --cppflags --cxxflags`
- GTEST_LIBS=`gtest-config --ldflags --libs`
-@@ -178,17 +194,13 @@
- AM_CONDITIONAL(HAVE_GMOCK, test x"$GMOCK_CONFIG" = "xyes")
-
- # We want to link in libunwind if it exists
--UNWIND_LIBS=
--# Unfortunately, we need to check the header file in addition to the
--# lib file to check if libunwind is available since libunwind-0.98
--# doesn't install all necessary header files.
--if test x"$ac_cv_have_libunwind_h" = x"1"; then
-- AC_CHECK_LIB(unwind, backtrace, UNWIND_LIBS=-lunwind)
--fi
--AC_SUBST(UNWIND_LIBS)
--if test x"$UNWIND_LIBS" != x""; then
-- AC_DEFINE(HAVE_LIB_UNWIND, 1, [define if you have libunwind])
--fi
-+AC_ARG_ENABLE([unwind],
-+ AS_HELP_STRING([--enable-unwind], [Enable libunwind]))
-+
-+AS_IF([test "x$enable_unwind" != "xno"], [
-+ PKG_CHECK_MODULES([UNWIND], [libunwind > 0.98])
-+ AC_DEFINE([HAVE_LIB_UNWIND], [1], [define if you have libunwind])
-+])
-
- # We'd like to use read/write locks in several places in the code.
- # See if our pthreads support extends to that. Note: for linux, it
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -40,12 +40,11 @@
- nodist_gloginclude_HEADERS = src/glog/logging.h src/glog/raw_logging.h src/glog/vlog_is_on.h src/glog/stl_logging.h
- noinst_HEADERS = src/glog/logging.h.in src/glog/raw_logging.h.in src/glog/vlog_is_on.h.in src/glog/stl_logging.h.in
-
--docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION)
- ## This is for HTML and other documentation you want to install.
- ## Add your documentation files (in doc/) in addition to these
- ## top-level boilerplate files. Also add a TODO file if you have one.
--dist_doc_DATA = AUTHORS COPYING ChangeLog INSTALL NEWS README README.windows \
-- doc/designstyle.css doc/glog.html
-+dist_doc_DATA = AUTHORS ChangeLog INSTALL NEWS README
-+dist_html_DATA = doc/designstyle.css doc/glog.html
-
- ## The libraries (.so's) you want to install
- lib_LTLIBRARIES =
-@@ -215,7 +214,7 @@
-
- ## This should always include $(TESTS), but may also include other
- ## binaries that you compile but don't want automatically installed.
--noinst_PROGRAMS = $(TESTS) $(TEST_BINARIES)
-+check_PROGRAMS = $(TESTS) $(TEST_BINARIES)
-
- rpm: dist-gzip packages/rpm.sh packages/rpm/rpm.spec
- @cd packages && ./rpm.sh ${PACKAGE} ${VERSION}
diff --git a/dev-cpp/glog/files/glog-0.3.4-fix-gcc5-demangling.patch b/dev-cpp/glog/files/glog-0.3.4-fix-gcc5-demangling.patch
deleted file mode 100644
index fd1518c68583..000000000000
--- a/dev-cpp/glog/files/glog-0.3.4-fix-gcc5-demangling.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From b1639e3014996fbc7635870e013559c54e7e3b2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?David=20Mart=C3=ADnez=20Moreno?= <ender@debian.org>
-Date: Thu, 13 Aug 2015 09:31:26 -0700
-Subject: [PATCH] Fix ABI demangling for the GCC 5.x case.
-
-When glog is compiled with gcc-5.2 in cxx11 ABI mode, it barfs about unmangled symbols. This patches it getting inspiration from binutils and demangle.cc itself, although it may be totally wrong or maybe have to use ParseAbiTag in more places. I haven't read the spec for the symbols, though.
-
-This patch makes the demangle unit test pass correctly.
----
- src/demangle.cc | 19 +++++++++++++++++++
- 1 file changed, 19 insertions(+)
-
-diff --git a/src/demangle.cc b/src/demangle.cc
-index e858181..0f0c831 100644
---- a/src/demangle.cc
-+++ b/src/demangle.cc
-@@ -439,6 +439,7 @@ static bool ParseExprPrimary(State *state);
- static bool ParseLocalName(State *state);
- static bool ParseDiscriminator(State *state);
- static bool ParseSubstitution(State *state);
-+static bool ParseAbiTag(State *state);
-
- // Implementation note: the following code is a straightforward
- // translation of the Itanium C++ ABI defined in BNF with a couple of
-@@ -567,6 +568,8 @@ static bool ParseNestedName(State *state) {
- static bool ParsePrefix(State *state) {
- bool has_something = false;
- while (true) {
-+ if (ParseAbiTag(state))
-+ continue;
- MaybeAppendSeparator(state);
- if (ParseTemplateParam(state) ||
- ParseSubstitution(state) ||
-@@ -585,6 +588,22 @@ static bool ParsePrefix(State *state) {
- return true;
- }
-
-+// <abi-tag> ::= B <source-name>
-+static bool ParseAbiTag(State *state) {
-+ State copy = *state;
-+
-+ Append(state, "[", 1);
-+ if (ParseOneCharToken(state, 'B') &&
-+ ParseSourceName(state))
-+ {
-+ Append(state, "]", 1);
-+ return true;
-+ }
-+
-+ *state = copy;
-+ return false;
-+}
-+
- // <unqualified-name> ::= <operator-name>
- // ::= <ctor-dtor-name>
- // ::= <source-name>
diff --git a/dev-cpp/glog/files/glog-0.5.0-IsGoogleLoggingInitialized_public.patch b/dev-cpp/glog/files/glog-0.5.0-IsGoogleLoggingInitialized_public.patch
new file mode 100644
index 000000000000..d08e4b17882f
--- /dev/null
+++ b/dev-cpp/glog/files/glog-0.5.0-IsGoogleLoggingInitialized_public.patch
@@ -0,0 +1,106 @@
+https://github.com/google/glog/issues/125
+https://github.com/google/glog/pull/651
+https://github.com/google/glog/commit/81e0d616edeb73cbd06d6c40bc4f90593ac0c5d1
+
+--- a/src/glog/logging.h.in
++++ b/src/glog/logging.h.in
+@@ -594,6 +594,9 @@
+ void* prefix_callback_data = NULL);
+ #endif
+
++// Check if google's logging library has been initialized.
++GOOGLE_GLOG_DLL_DECL bool IsGoogleLoggingInitialized();
++
+ // Shutdown google's logging library.
+ GOOGLE_GLOG_DLL_DECL void ShutdownGoogleLogging();
+
+--- a/src/logging_custom_prefix_unittest.cc
++++ b/src/logging_custom_prefix_unittest.cc
+@@ -221,11 +221,15 @@
+ LogWithLevels(0, 0, 0, 0); // simulate "before global c-tors"
+ const string early_stderr = GetCapturedTestStderr();
+
++ EXPECT_FALSE(IsGoogleLoggingInitialized());
++
+ // Setting a custom prefix generator (it will use the default format so that
+ // the golden outputs can be reused):
+ string prefix_attacher_data = "good data";
+ InitGoogleLogging(argv[0], &PrefixAttacher, static_cast<void*>(&prefix_attacher_data));
+
++ EXPECT_TRUE(IsGoogleLoggingInitialized());
++
+ RunSpecifiedBenchmarks();
+
+ FLAGS_logtostderr = true;
+@@ -992,8 +996,10 @@
+ base::SetLogger(GLOG_INFO,
+ new RecordDeletionLogger(&custom_logger_deleted,
+ base::GetLogger(GLOG_INFO)));
++ EXPECT_TRUE(IsGoogleLoggingInitialized());
+ ShutdownGoogleLogging();
+ EXPECT_TRUE(custom_logger_deleted);
++ EXPECT_FALSE(IsGoogleLoggingInitialized());
+ }
+
+ _START_GOOGLE_NAMESPACE_
+--- a/src/logging_unittest.cc
++++ b/src/logging_unittest.cc
+@@ -197,8 +197,12 @@
+ LogWithLevels(0, 0, 0, 0); // simulate "before global c-tors"
+ const string early_stderr = GetCapturedTestStderr();
+
++ EXPECT_FALSE(IsGoogleLoggingInitialized());
++
+ InitGoogleLogging(argv[0]);
+
++ EXPECT_TRUE(IsGoogleLoggingInitialized());
++
+ RunSpecifiedBenchmarks();
+
+ FLAGS_logtostderr = true;
+@@ -965,8 +969,10 @@
+ base::SetLogger(GLOG_INFO,
+ new RecordDeletionLogger(&custom_logger_deleted,
+ base::GetLogger(GLOG_INFO)));
++ EXPECT_TRUE(IsGoogleLoggingInitialized());
+ ShutdownGoogleLogging();
+ EXPECT_TRUE(custom_logger_deleted);
++ EXPECT_FALSE(IsGoogleLoggingInitialized());
+ }
+
+ _START_GOOGLE_NAMESPACE_
+--- a/src/utilities.cc
++++ b/src/utilities.cc
+@@ -62,6 +62,10 @@
+
+ static const char* g_program_invocation_short_name = NULL;
+
++bool IsGoogleLoggingInitialized() {
++ return g_program_invocation_short_name != NULL;
++}
++
+ _END_GOOGLE_NAMESPACE_
+
+ // The following APIs are all internal.
+@@ -176,10 +180,6 @@
+ }
+ }
+
+-bool IsGoogleLoggingInitialized() {
+- return g_program_invocation_short_name != NULL;
+-}
+-
+ #ifdef OS_WINDOWS
+ struct timeval {
+ long tv_sec, tv_usec;
+--- a/src/utilities.h
++++ b/src/utilities.h
+@@ -163,8 +163,6 @@
+
+ const char* ProgramInvocationShortName();
+
+-bool IsGoogleLoggingInitialized();
+-
+ int64 CycleClock_Now();
+
+ int64 UsecToCycles(int64 usec);
diff --git a/dev-cpp/glog/files/glog-0.5.0-vmodule_levels_changeability.patch b/dev-cpp/glog/files/glog-0.5.0-vmodule_levels_changeability.patch
new file mode 100644
index 000000000000..ed1f6a17d8df
--- /dev/null
+++ b/dev-cpp/glog/files/glog-0.5.0-vmodule_levels_changeability.patch
@@ -0,0 +1,171 @@
+https://github.com/google/glog/issues/649
+https://github.com/google/glog/pull/650
+https://github.com/google/glog/commit/86fea1ab254c463cbb72e5ce8bcc6855bc4e1e9c
+
+--- a/src/glog/vlog_is_on.h.in
++++ b/src/glog/vlog_is_on.h.in
+@@ -81,10 +81,10 @@
+ // parsing of --vmodule flag and/or SetVLOGLevel calls.
+ #define VLOG_IS_ON(verboselevel) \
+ __extension__ \
+- ({ static @ac_google_namespace@::int32* vlocal__ = NULL; \
++ ({ static @ac_google_namespace@::SiteFlag vlocal__{NULL, NULL, 0, NULL}; \
+ @ac_google_namespace@::int32 verbose_level__ = (verboselevel); \
+- (vlocal__ == NULL ? @ac_google_namespace@::InitVLOG3__(&vlocal__, &FLAGS_v, \
+- __FILE__, verbose_level__) : *vlocal__ >= verbose_level__); \
++ (vlocal__.level == NULL ? @ac_google_namespace@::InitVLOG3__(&vlocal__, &FLAGS_v, \
++ __FILE__, verbose_level__) : *vlocal__.level >= verbose_level__); \
+ })
+ #else
+ // GNU extensions not available, so we do not support --vmodule.
+@@ -105,6 +105,13 @@
+
+ // Various declarations needed for VLOG_IS_ON above: =========================
+
++struct SiteFlag {
++ @ac_google_namespace@::int32* level;
++ const char* base_name;
++ size_t base_len;
++ SiteFlag* next;
++};
++
+ // Helper routine which determines the logging info for a particalur VLOG site.
+ // site_flag is the address of the site-local pointer to the controlling
+ // verbosity level
+@@ -114,7 +121,7 @@
+ // We will return the return value for VLOG_IS_ON
+ // and if possible set *site_flag appropriately.
+ extern GOOGLE_GLOG_DLL_DECL bool InitVLOG3__(
+- @ac_google_namespace@::int32** site_flag,
++ @ac_google_namespace@::SiteFlag* site_flag,
+ @ac_google_namespace@::int32* site_default,
+ const char* fname,
+ @ac_google_namespace@::int32 verbose_level);
+--- a/src/logging_unittest.cc
++++ b/src/logging_unittest.cc
+@@ -98,6 +98,7 @@
+ static void TestRawLogging();
+ static void LogWithLevels(int v, int severity, bool err, bool alsoerr);
+ static void TestLoggingLevels();
++static void TestVLogModule();
+ static void TestLogString();
+ static void TestLogSink();
+ static void TestLogToString();
+@@ -223,6 +224,7 @@
+ TestLogging(true);
+ TestRawLogging();
+ TestLoggingLevels();
++ TestVLogModule();
+ TestLogString();
+ TestLogSink();
+ TestLogToString();
+@@ -453,6 +455,24 @@
+ LogWithLevels(1, GLOG_FATAL, false, true);
+ }
+
++int TestVlogHelper() {
++ if (VLOG_IS_ON(1)) {
++ return 1;
++ }
++ return 0;
++}
++
++void TestVLogModule() {
++ int c = TestVlogHelper();
++ EXPECT_EQ(0, c);
++
++#if defined(__GNUC__)
++ EXPECT_EQ(0, SetVLOGLevel("logging_unittest", 1));
++ c = TestVlogHelper();
++ EXPECT_EQ(1, c);
++#endif
++}
++
+ TEST(DeathRawCHECK, logging) {
+ ASSERT_DEATH(RAW_CHECK(false, "failure 1"),
+ "RAW: Check false failed: failure 1");
+--- a/src/vlog_is_on.cc
++++ b/src/vlog_is_on.cc
+@@ -125,6 +125,8 @@
+ // Pointer to head of the VModuleInfo list.
+ // It's a map from module pattern to logging level for those module(s).
+ static VModuleInfo* vmodule_list = 0;
++static SiteFlag* cached_site_list = 0;
++
+ // Boolean initialization flag.
+ static bool inited_vmodule = false;
+
+@@ -190,6 +192,23 @@
+ info->vlog_level = log_level;
+ info->next = vmodule_list;
+ vmodule_list = info;
++
++ SiteFlag** item_ptr = &cached_site_list;
++ SiteFlag* item = cached_site_list;
++
++ // We traverse the list fully because the pattern can match several items
++ // from the list.
++ while (item) {
++ if (SafeFNMatch_(module_pattern, pattern_len, item->base_name,
++ item->base_len)) {
++ // Redirect the cached value to its module override.
++ item->level = &info->vlog_level;
++ *item_ptr = item->next; // Remove the item from the list.
++ } else {
++ item_ptr = &item->next;
++ }
++ item = *item_ptr;
++ }
+ }
+ }
+ RAW_VLOG(1, "Set VLOG level for \"%s\" to %d", module_pattern, log_level);
+@@ -198,7 +217,7 @@
+
+ // NOTE: Individual VLOG statements cache the integer log level pointers.
+ // NOTE: This function must not allocate memory or require any locks.
+-bool InitVLOG3__(int32** site_flag, int32* site_default,
++bool InitVLOG3__(SiteFlag* site_flag, int32* level_default,
+ const char* fname, int32 verbose_level) {
+ MutexLock l(&vmodule_lock);
+ bool read_vmodule_flag = inited_vmodule;
+@@ -211,10 +230,17 @@
+ int old_errno = errno;
+
+ // site_default normally points to FLAGS_v
+- int32* site_flag_value = site_default;
++ int32* site_flag_value = level_default;
+
+ // Get basename for file
+ const char* base = strrchr(fname, '/');
++
++#ifdef _WIN32
++ if (!base) {
++ base = strrchr(fname, '\\');
++ }
++#endif
++
+ base = base ? (base+1) : fname;
+ const char* base_end = strchr(base, '.');
+ size_t base_length = base_end ? size_t(base_end - base) : strlen(base);
+@@ -244,7 +270,20 @@
+ ANNOTATE_BENIGN_RACE(site_flag,
+ "*site_flag may be written by several threads,"
+ " but the value will be the same");
+- if (read_vmodule_flag) *site_flag = site_flag_value;
++ if (read_vmodule_flag) {
++ site_flag->level = site_flag_value;
++ // If VLOG flag has been cached to the default site pointer,
++ // we want to add to the cached list in order to invalidate in case
++ // SetVModule is called afterwards with new modules.
++ // The performance penalty here is neglible, because InitVLOG3__ is called
++ // once per site.
++ if (site_flag_value == level_default && !site_flag->base_name) {
++ site_flag->base_name = base;
++ site_flag->base_len = base_length;
++ site_flag->next = cached_site_list;
++ cached_site_list = site_flag;
++ }
++ }
+
+ // restore the errno in case something recoverable went wrong during
+ // the initialization of the VLOG mechanism (see above note "protect the..")