8150823: UL disables log outputs incorrectly

Reviewed-by: rehn, sla
This commit is contained in:
Marcus Larsson 2016-08-26 14:27:41 +02:00
parent ae70b68f7e
commit 10245a95e3
2 changed files with 12 additions and 4 deletions

View File

@ -243,6 +243,7 @@ void LogConfiguration::configure_output(size_t idx, const LogTagLevelExpression&
} }
void LogConfiguration::disable_output(size_t idx) { void LogConfiguration::disable_output(size_t idx) {
assert(idx < _n_outputs, "invalid index: " SIZE_FORMAT " (_n_outputs: " SIZE_FORMAT ")", idx, _n_outputs);
LogOutput* out = _outputs[idx]; LogOutput* out = _outputs[idx];
// Remove the output from all tagsets. // Remove the output from all tagsets.
@ -253,7 +254,7 @@ void LogConfiguration::disable_output(size_t idx) {
// Delete the output unless stdout/stderr // Delete the output unless stdout/stderr
if (out != LogOutput::Stderr && out != LogOutput::Stdout) { if (out != LogOutput::Stderr && out != LogOutput::Stdout) {
delete_output(find_output(out->name())); delete_output(idx);
} else { } else {
out->set_config_string("all=off"); out->set_config_string("all=off");
} }
@ -261,8 +262,8 @@ void LogConfiguration::disable_output(size_t idx) {
void LogConfiguration::disable_logging() { void LogConfiguration::disable_logging() {
ConfigurationLock cl; ConfigurationLock cl;
for (size_t i = 0; i < _n_outputs; i++) { for (size_t i = _n_outputs; i > 0; i--) {
disable_output(i); disable_output(i - 1);
} }
notify_update_listeners(); notify_update_listeners();
} }

View File

@ -164,10 +164,17 @@ TEST_F(LogConfigurationTest, disable_logging) {
// Add TestLogFileName as an output // Add TestLogFileName as an output
set_log_config(TestLogFileName, "logging=info"); set_log_config(TestLogFileName, "logging=info");
// Add a second file output
char other_file_name[2 * K];
jio_snprintf(other_file_name, sizeof(other_file_name), "%s-other", TestLogFileName);
set_log_config(other_file_name, "logging=info");
LogConfiguration::disable_logging(); LogConfiguration::disable_logging();
// Verify TestLogFileName was disabled // Verify that both file outputs were disabled
EXPECT_FALSE(is_described(TestLogFileName)); EXPECT_FALSE(is_described(TestLogFileName));
EXPECT_FALSE(is_described(other_file_name));
delete_file(other_file_name);
// Verify that no tagset has logging enabled // Verify that no tagset has logging enabled
for (LogTagSet* ts = LogTagSet::first(); ts != NULL; ts = ts->next()) { for (LogTagSet* ts = LogTagSet::first(); ts != NULL; ts = ts->next()) {