Commit 87ee8e5d authored by Marcin Siodelski's avatar Marcin Siodelski
Browse files

[3823] Removed the limit for the number of log messages pointers.

The limit had been introduced when the message pointers were held
in the array (having a fixed size). With recent changes the array
has been replaced with the list. Since, the list is dynamically
allocated there is no need for fixed size.
parent b6a13514
......@@ -53,15 +53,11 @@ getNonConstDuplicates() {
namespace isc {
namespace log {
// Constructor. Add the pointer to the message array to the global array.
// This method will trigger an assertion failure if the array overflows.
MessageInitializer::MessageInitializer(const char* values[])
: values_(values),
global_dictionary_(MessageDictionary::globalDictionary()),
global_logger_values_(getNonConstLoggerValues()),
global_logger_duplicates_(getNonConstDuplicates()) {
assert(global_logger_values_->size() < MAX_MESSAGE_ARRAYS);
global_logger_values_->push_back(values);
}
......
......@@ -70,12 +70,6 @@ typedef boost::shared_ptr<LoggerDuplicatesList> LoggerDuplicatesListPtr;
/// called to populate the messages defined in various instances of the
/// \c MessageInitializer class to the global dictionary.
///
/// \note The maximum number of message arrays that can be added to the
/// dictionary in this way is defined by the constant
/// MessageInitializer::MAX_MESSAGE_ARRAYS. This is set to 256 as a compromise
/// between wasted space and allowing for future expansion, but can be
/// changed (by editing the source file) to any value desired.
///
/// When messages are added to the dictionary, the are added via the
/// MessageDictionary::add() method, so any duplicates are stored in the
/// global dictionary's overflow lince whence they can be retrieved at
......@@ -83,8 +77,6 @@ typedef boost::shared_ptr<LoggerDuplicatesList> LoggerDuplicatesListPtr;
class MessageInitializer : public boost::noncopyable {
public:
/// Maximum number of message arrays that can be initialized in this way
static const size_t MAX_MESSAGE_ARRAYS = 256;
/// \brief Constructor
///
......
......@@ -120,10 +120,6 @@ initializer_unittests_1_CXXFLAGS = $(AM_CXXFLAGS)
initializer_unittests_1_LDADD = $(AM_LDADD)
initializer_unittests_1_LDFLAGS = $(AM_LDFLAGS)
TESTS += initializer_unittests_2
initializer_unittests_2_SOURCES = run_initializer_unittests.cc
initializer_unittests_2_SOURCES += message_initializer_2_unittest.cc
initializer_unittests_2_CPPFLAGS = $(AM_CPPFLAGS)
initializer_unittests_2_CXXFLAGS = $(AM_CXXFLAGS)
initializer_unittests_2_LDADD = $(AM_LDADD)
......
// Copyright (C) 2012,2015 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
#include <config.h>
#include <log/message_initializer.h>
#include <gtest/gtest.h>
#include <util/unittests/resource.h>
#include <util/unittests/check_valgrind.h>
using namespace isc::log;
// Declare a set of messages to go into the global dictionary.
namespace {
const char* values[] = {
"GLOBAL1", "global message one",
"GLOBAL2", "global message two",
NULL
};
}
TEST(MessageInitializerTest2, MessageLoadTest) {
// Create the list where the initializers will be held.
std::list<boost::shared_ptr<MessageInitializer> > initializers;
// Load the maximum number of message arrays allowed. Some arrays may
// already have been loaded because of static initialization from modules
// in libraries linked against the test program, hence the reason for the
// loop starting from the value returned by getPendingCount() instead of 0
for (size_t i = MessageInitializer::getPendingCount();
i < MessageInitializer::MAX_MESSAGE_ARRAYS; ++i) {
boost::shared_ptr<MessageInitializer> initializer(new MessageInitializer(values));
initializers.push_back(initializer);
}
// Note: Not all systems have EXPECT_DEATH. As it is a macro we can just
// test for its presence and bypass the test if not available.
#ifdef EXPECT_DEATH
// Adding one more should take us over the limit.
if (!isc::util::unittests::runningOnValgrind()) {
EXPECT_DEATH({
isc::util::unittests::dontCreateCoreDumps();
MessageInitializer initializer(values);
}, ".*");
}
#endif
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment