summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorromange <romange@users.noreply.github.com>2015-04-30 17:28:32 (GMT)
committerromange <romange@users.noreply.github.com>2015-04-30 17:28:32 (GMT)
commit2c5038470b28b839792cc45b790ef6d668006f1e (patch)
tree2fcae2d0dc35cc8f6a8e55e268e16548fc542382 /src
parent2a02db7aa5f3a832f0d215aeb395d5c218ad8f3e (diff)
downloadglog-2c5038470b28b839792cc45b790ef6d668006f1e.zip
glog-2c5038470b28b839792cc45b790ef6d668006f1e.tar.gz
glog-2c5038470b28b839792cc45b790ef6d668006f1e.tar.bz2
Update vlog_is_on.cc
SetVLOGLevel locks vmodule_lock however RAW_VLOG at the end also implicitly locks it via InitVLOG3__. This causes deadlock/segfault.
Diffstat (limited to 'src')
-rw-r--r--src/vlog_is_on.cc38
1 files changed, 20 insertions, 18 deletions
diff --git a/src/vlog_is_on.cc b/src/vlog_is_on.cc
index 8a79df5..4c95583 100644
--- a/src/vlog_is_on.cc
+++ b/src/vlog_is_on.cc
@@ -162,30 +162,32 @@ int SetVLOGLevel(const char* module_pattern, int log_level) {
int result = FLAGS_v;
int const pattern_len = strlen(module_pattern);
bool found = false;
- MutexLock l(&vmodule_lock); // protect whole read-modify-write
- for (const VModuleInfo* info = vmodule_list;
- info != NULL; info = info->next) {
- if (info->module_pattern == module_pattern) {
- if (!found) {
+ {
+ MutexLock l(&vmodule_lock); // protect whole read-modify-write
+ for (const VModuleInfo* info = vmodule_list;
+ info != NULL; info = info->next) {
+ if (info->module_pattern == module_pattern) {
+ if (!found) {
+ result = info->vlog_level;
+ found = true;
+ }
+ info->vlog_level = log_level;
+ } else if (!found &&
+ SafeFNMatch_(info->module_pattern.c_str(),
+ info->module_pattern.size(),
+ module_pattern, pattern_len)) {
result = info->vlog_level;
found = true;
}
+ }
+ if (!found) {
+ VModuleInfo* info = new VModuleInfo;
+ info->module_pattern = module_pattern;
info->vlog_level = log_level;
- } else if (!found &&
- SafeFNMatch_(info->module_pattern.c_str(),
- info->module_pattern.size(),
- module_pattern, pattern_len)) {
- result = info->vlog_level;
- found = true;
+ info->next = vmodule_list;
+ vmodule_list = info;
}
}
- if (!found) {
- VModuleInfo* info = new VModuleInfo;
- info->module_pattern = module_pattern;
- info->vlog_level = log_level;
- info->next = vmodule_list;
- vmodule_list = info;
- }
RAW_VLOG(1, "Set VLOG level for \"%s\" to %d", module_pattern, log_level);
return result;
}