best init
diff --git a/quic/core/crypto/quic_random.cc b/quic/core/crypto/quic_random.cc
index 56657b5..e97bc7c 100644
--- a/quic/core/crypto/quic_random.cc
+++ b/quic/core/crypto/quic_random.cc
@@ -23,13 +23,18 @@
return (x << k) | (x >> (64 - k));
}
+inline uint64_t Xoshiro256InitializeRngStateMember() {
+ uint64_t result;
+ RAND_bytes(reinterpret_cast<uint8_t*>(&result), sizeof(result));
+ return result;
+}
+
uint64_t Xoshiro256PlusPlus() {
- static thread_local uint64_t rng_state[4];
- static thread_local bool rng_state_initialized = false;
- if (QUIC_PREDICT_FALSE(!rng_state_initialized)) {
- RAND_bytes(reinterpret_cast<uint8_t*>(&rng_state), sizeof(rng_state));
- rng_state_initialized = true;
- }
+ static thread_local uint64_t rng_state[4] = {
+ Xoshiro256InitializeRngStateMember(),
+ Xoshiro256InitializeRngStateMember(),
+ Xoshiro256InitializeRngStateMember(),
+ Xoshiro256InitializeRngStateMember()};
const uint64_t result =
Xoshiro256PlusPlusRotLeft(rng_state[0] + rng_state[3], 23) + rng_state[0];
const uint64_t t = rng_state[1] << 17;