From d00a7e90f870e69735839e09b94b9919e3d35a3b Mon Sep 17 00:00:00 2001 From: Razvan Becheriu Date: Wed, 3 Jun 2020 11:56:47 +0300 Subject: [PATCH] [#1266] Initialize logger internal pointer only once --- src/lib/log/logger.cc | 12 ++++-------- src/lib/log/logger.h | 9 +++++---- src/lib/log/logger_impl.h | 4 ++++ 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/lib/log/logger.cc b/src/lib/log/logger.cc index 66c0c19c1a..52945640fb 100644 --- a/src/lib/log/logger.cc +++ b/src/lib/log/logger.cc @@ -16,6 +16,8 @@ #include #include +#include + #include using namespace std; @@ -23,7 +25,7 @@ using namespace std; namespace isc { namespace log { -LoggerImpl* +LoggerImplPtr Logger::getLoggerPtr() { if (!initialized_) { lock_guard lk(mutex_); @@ -39,7 +41,7 @@ Logger::getLoggerPtr() { void Logger::initLoggerImpl() { if (isLoggingInitialized()) { - loggerptr_ = new LoggerImpl(name_); + loggerptr_ = boost::make_shared(name_); } else { isc_throw(LoggingNotInitialized, "attempt to access logging function " "before logging has been initialized"); @@ -49,12 +51,6 @@ Logger::initLoggerImpl() { // Destructor. Logger::~Logger() { - delete loggerptr_; - - // The next statement is required for the Kea hooks framework, where a - // statically-linked Kea loads and unloads multiple libraries. See the hooks - // documentation for more details. - loggerptr_ = 0; } // Get Version diff --git a/src/lib/log/logger.h b/src/lib/log/logger.h index 3b86cb7fe5..eee8b3e5d5 100644 --- a/src/lib/log/logger.h +++ b/src/lib/log/logger.h @@ -10,13 +10,14 @@ #include #include #include -#include #include #include +#include #include #include +#include #include #include #include @@ -164,7 +165,7 @@ public: /// \note Note also that there is no constructor taking a std::string. This /// minimizes the possibility of initializing a static logger with a /// string, so leading to problems mentioned above. - Logger(const char* name) : loggerptr_(NULL), initialized_(false) { + Logger(const char* name) : loggerptr_(), initialized_(false) { // Validate the name of the logger. if (name == NULL) { @@ -346,13 +347,13 @@ private: /// cause a "LoggingNotInitialized" exception to be thrown. /// /// \return Returns pointer to implementation - LoggerImpl* getLoggerPtr(); + LoggerImplPtr getLoggerPtr(); /// \brief Initialize Underlying Implementation and Set loggerptr_ void initLoggerImpl(); ///< Pointer to underlying logger - LoggerImpl* loggerptr_; + LoggerImplPtr loggerptr_; ///< Copy of the logger name char name_[MAX_LOGGER_NAME_SIZE + 1]; diff --git a/src/lib/log/logger_impl.h b/src/lib/log/logger_impl.h index babb8e807e..9e1fae7497 100644 --- a/src/lib/log/logger_impl.h +++ b/src/lib/log/logger_impl.h @@ -15,6 +15,8 @@ #include #include #include + +#include #include @@ -192,6 +194,8 @@ private: isc::log::interprocess::InterprocessSync* sync_; }; +typedef boost::shared_ptr LoggerImplPtr; + } // namespace log } // namespace isc