From cdffe88319f6d0f7b7ca0289ea6bdbc21f2aa30c Mon Sep 17 00:00:00 2001 From: hongweipeng Date: Tue, 7 May 2024 15:21:22 +0800 Subject: [PATCH] Fix memory leak in TlsRandomNumberGenerator() constructor #2660 --- sdk/src/common/random.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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