From 2ed196e07a231a5cc4463c5fa05b8e9e4a79c216 Mon Sep 17 00:00:00 2001 From: Date: Fri, 17 Oct 2008 11:53:23 +0000 Subject: [PATCH] Fix a bug: vmodule didn't work with gflags. Since gflags isn't initialized when REGISTER_MODULE_INITIALIZER is invoked, we couldn't initialize vmodule_list properly. Modified to call VLOG2Initializer in the first call of InitVLOG3__. git-svn-id: https://google-glog.googlecode.com/svn/trunk@8 eb4d4688-79bd-11dd-afb4-1d65580434c0 --- src/vlog_is_on.cc | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/vlog_is_on.cc b/src/vlog_is_on.cc index 4f2a552..877751d 100644 --- a/src/vlog_is_on.cc +++ b/src/vlog_is_on.cc @@ -88,8 +88,9 @@ static VModuleInfo* vmodule_list = 0; // Boolean initialization flag. static bool inited_vmodule = false; +// L >= vmodule_lock. static void VLOG2Initializer() { - MutexLock l(&vmodule_lock); + vmodule_lock.AssertHeld(); // Can now parse --vmodule flag and initialize mapping of module-specific // logging levels. inited_vmodule = false; @@ -120,8 +121,6 @@ static void VLOG2Initializer() { inited_vmodule = true; } -REGISTER_MODULE_INITIALIZER(vlog_is_on, VLOG2Initializer()); - // This can be called very early, so we use SpinLock and RAW_VLOG here. int SetVLOGLevel(const char* module_pattern, int log_level) { int result = FLAGS_v; @@ -161,12 +160,8 @@ bool InitVLOG3__(int32** site_flag, int32* site_default, const char* fname, int32 verbose_level) { MutexLock l(&vmodule_lock); bool read_vmodule_flag = inited_vmodule; - if (!read_vmodule_flag && vmodule_list == 0) { - // The command line --vmodule flags haven't been parsed - // and nothing was set with SetVLOGLevel yet, - // but *site_default (usually FLAGS_v) might be manually set - // by some early-executing code, or else it's still 0. - return *site_default >= verbose_level; + if (!read_vmodule_flag) { + VLOG2Initializer(); } // protect the errno global in case someone writes: -- 2.7.4