]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1266] Initialize logger internal pointer only once
authorRazvan Becheriu <razvan@isc.org>
Tue, 2 Jun 2020 20:35:01 +0000 (23:35 +0300)
committerRazvan Becheriu <razvan@isc.org>
Tue, 2 Jun 2020 20:35:01 +0000 (23:35 +0300)
src/lib/log/logger.cc
src/lib/log/logger.h

index 3ce748db5fe0bd999e0363a19c75936e0b095012..66c0c19c1a6ceb55897090047abda423f6c5b1d4 100644 (file)
@@ -25,11 +25,12 @@ namespace log {
 
 LoggerImpl*
 Logger::getLoggerPtr() {
-    if (!loggerptr_) {
+    if (!initialized_) {
         lock_guard<mutex> lk(mutex_);
-        if (!loggerptr_) {
+        if (!initialized_) {
             initLoggerImpl();
         }
+        initialized_ = true;
     }
     return (loggerptr_);
 }
index c28f2330b4fc980d9113e4f1e02b6c45d24ac01b..08f1f1748ab695c866f91157c7184bb7df4d02d2 100644 (file)
@@ -7,6 +7,7 @@
 #ifndef LOGGER_H
 #define LOGGER_H
 
+#include <atomic>
 #include <cassert>
 #include <cstdlib>
 #include <string>
@@ -350,9 +351,17 @@ private:
     /// \brief Initialize Underlying Implementation and Set loggerptr_
     void initLoggerImpl();
 
-    LoggerImpl* loggerptr_;                      ///< Pointer to underlying logger
-    char        name_[MAX_LOGGER_NAME_SIZE + 1]; ///< Copy of the logger name
-    std::mutex  mutex_;                          ///< Mutex to protect the internal state
+    ///< Pointer to underlying logger
+    LoggerImpl* loggerptr_;
+
+    ///< Copy of the logger name
+    char name_[MAX_LOGGER_NAME_SIZE + 1];
+
+    ///< Mutex to protect the internal state
+    std::mutex mutex_;
+
+    ///< Flag which indicates if logger is initialized
+    std::atomic<bool> initialized_;
 };
 
 } // namespace log