diff --git a/sdk/src/common/random.cc b/sdk/src/common/random.cc index 77b88cfa2a..c02dd627bc 100644 --- a/sdk/src/common/random.cc +++ b/sdk/src/common/random.cc @@ -5,6 +5,7 @@ #include "src/common/random.h" #include "src/common/platform/fork.h" +#include #include #include @@ -26,12 +27,18 @@ class TlsRandomNumberGenerator TlsRandomNumberGenerator() noexcept { Seed(); - platform::AtFork(nullptr, nullptr, OnFork); + if (flag) + { + platform::AtFork(nullptr, nullptr, OnFork); + flag = false; + } } static FastRandomNumberGenerator &engine() noexcept { return engine_; } private: + static std::atomic flag; + static thread_local FastRandomNumberGenerator engine_; static void OnFork() noexcept { Seed(); } @@ -44,6 +51,7 @@ class TlsRandomNumberGenerator } }; +std::atomic TlsRandomNumberGenerator::flag{true}; thread_local FastRandomNumberGenerator TlsRandomNumberGenerator::engine_{}; } // namespace