Skip to content

Commit 9ebc698

Browse files
committed
Fix memory leak in TlsRandomNumberGenerator() constructor #2660
1 parent da8e377 commit 9ebc698

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

sdk/src/common/random.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "src/common/random.h"
66
#include "src/common/platform/fork.h"
77

8+
#include <atomic>
89
#include <cstring>
910
#include <random>
1011

@@ -26,12 +27,17 @@ class TlsRandomNumberGenerator
2627
TlsRandomNumberGenerator() noexcept
2728
{
2829
Seed();
29-
platform::AtFork(nullptr, nullptr, OnFork);
30+
if (!flag.test_and_set())
31+
{
32+
platform::AtFork(nullptr, nullptr, OnFork);
33+
}
3034
}
3135

3236
static FastRandomNumberGenerator &engine() noexcept { return engine_; }
3337

3438
private:
39+
static std::atomic_flag flag;
40+
3541
static thread_local FastRandomNumberGenerator engine_;
3642

3743
static void OnFork() noexcept { Seed(); }
@@ -44,6 +50,7 @@ class TlsRandomNumberGenerator
4450
}
4551
};
4652

53+
std::atomic_flag TlsRandomNumberGenerator::flag;
4754
thread_local FastRandomNumberGenerator TlsRandomNumberGenerator::engine_{};
4855
} // namespace
4956

0 commit comments

Comments
 (0)