diff --git a/src/unique_id.cc b/src/unique_id.cc index 57db4195..7334d5a4 100644 --- a/src/unique_id.cc +++ b/src/unique_id.cc @@ -55,6 +55,8 @@ namespace modsecurity { +std::once_flag UniqueId::onceFlag; + void UniqueId::fillUniqueId() { std::string macAddress; std::string name; diff --git a/src/unique_id.h b/src/unique_id.h index f39bedd0..437ef657 100644 --- a/src/unique_id.h +++ b/src/unique_id.h @@ -15,6 +15,7 @@ #ifdef __cplusplus #include +#include #endif #ifndef SRC_UNIQUE_ID_H_ @@ -37,9 +38,9 @@ class UniqueId { } static std::string uniqueId() { - if (UniqueId::getInstance().uniqueId_str.empty()) { + std::call_once(UniqueId::onceFlag,[]() { UniqueId::getInstance().fillUniqueId(); - } + }); return UniqueId::getInstance().uniqueId_str; } @@ -59,6 +60,8 @@ class UniqueId { // C++ 11 // UniqueId(UniqueId const&) = delete; // void operator=(UniqueId const&) = delete; + + static std::once_flag onceFlag; }; } // namespace modsecurity