From b85a6456105ef9b3957af8fa1ea0baca7686a6d5 Mon Sep 17 00:00:00 2001 From: Wenfeng Liu Date: Fri, 25 May 2018 09:10:23 +0000 Subject: [PATCH] Fix race condition in UniqueId::uniqueId() --- src/unique_id.cc | 2 ++ src/unique_id.h | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) 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