From 65e293514422a0a969a6eda7944ec7d65366d754 Mon Sep 17 00:00:00 2001 From: Marcin Siodelski Date: Thu, 30 Apr 2015 14:52:43 -0700 Subject: [PATCH] [3823] Addressed review comments. Do not remove duplicates if other MessageInitializers held them. Also, do not remove message from the dictionary if removing the duplicate. --- src/lib/log/message_initializer.cc | 15 +++++++++++++-- .../log/tests/message_initializer_1_unittest.cc | 9 +++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/lib/log/message_initializer.cc b/src/lib/log/message_initializer.cc index adcb840bff..8ea00914be 100644 --- a/src/lib/log/message_initializer.cc +++ b/src/lib/log/message_initializer.cc @@ -1,3 +1,4 @@ + // Copyright (C) 2011,2015 Internet Systems Consortium, Inc. ("ISC") // // Permission to use, copy, modify, and/or distribute this software for any @@ -77,8 +78,18 @@ MessageInitializer::~MessageInitializer() { // the dictionary and/or duplicates. int i = 0; while (values_[i]) { - global_logger_duplicates_->remove(values_[i]); - global_dictionary_->erase(values_[i], values_[i + 1]); + // Check if the unloaded message is registered as duplicate. If it is, + // remove it from the duplicates list. + LoggerDuplicatesList::const_iterator dup = + std::find(global_logger_duplicates_->begin(), + global_logger_duplicates_->end(), + values_[i]); + if (dup != global_logger_duplicates_->end()) { + global_logger_duplicates_->erase(dup); + + } else { + global_dictionary_->erase(values_[i], values_[i + 1]); + } i += 2; } } diff --git a/src/lib/log/tests/message_initializer_1_unittest.cc b/src/lib/log/tests/message_initializer_1_unittest.cc index bd922cfbf4..bca8dbedbf 100644 --- a/src/lib/log/tests/message_initializer_1_unittest.cc +++ b/src/lib/log/tests/message_initializer_1_unittest.cc @@ -45,7 +45,7 @@ const char* values3[] = { }; const char* values4[] = { - "GLOBAL8", "global message eight bis", + "GLOBAL8", "global message eight", "GLOBAL9", "global message nine", NULL }; @@ -119,11 +119,12 @@ TEST(MessageInitializerTest1, dynamicLoadUnload) { EXPECT_EQ("global message eight", global->getText("GLOBAL8")); EXPECT_EQ("global message nine", global->getText("GLOBAL9")); - // Destroy the first initializer. The first two messages should - // be unregistered. + // Destroy the first initializer. The first message should be removed. + // The second message should not be removed because it is also held + // by another object. init1.reset(); EXPECT_TRUE(global->getText("GLOBAL7").empty()); - EXPECT_TRUE(global->getText("GLOBAL8").empty()); + EXPECT_EQ("global message eight", global->getText("GLOBAL8")); EXPECT_EQ("global message nine", global->getText("GLOBAL9")); // Destroy the second initializer. Now, all messages should be -- 2.47.3