From cddb31bb0a132afa50b5350196cf26f0064fe3e2 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Thu, 10 Jan 2019 18:19:50 -0800 Subject: [PATCH] Encapsulate RNGState better --- src/random.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/random.cpp b/src/random.cpp index f52b5837aa..fe5341ba5f 100644 --- a/src/random.cpp +++ b/src/random.cpp @@ -278,13 +278,14 @@ void LockingCallbackOpenSSL(int mode, int i, const char* file, int line); namespace { -struct RNGState { +class RNGState { Mutex m_mutex; unsigned char m_state[32] GUARDED_BY(m_mutex) = {0}; uint64_t m_counter GUARDED_BY(m_mutex) = 0; bool m_strongly_seeded GUARDED_BY(m_mutex) = false; std::unique_ptr m_mutex_openssl; +public: RNGState() noexcept { InitHardwareRand(); @@ -342,6 +343,8 @@ struct RNGState { memory_cleanse(buf, 64); return ret; } + + Mutex& GetOpenSSLMutex(int i) { return m_mutex_openssl[i]; } }; RNGState& GetRNGState() noexcept @@ -358,9 +361,9 @@ void LockingCallbackOpenSSL(int mode, int i, const char* file, int line) NO_THRE RNGState& rng = GetRNGState(); if (mode & CRYPTO_LOCK) { - rng.m_mutex_openssl[i].lock(); + rng.GetOpenSSLMutex(i).lock(); } else { - rng.m_mutex_openssl[i].unlock(); + rng.GetOpenSSLMutex(i).unlock(); } }