diff --git a/libethcore/EthashAux.cpp b/libethcore/EthashAux.cpp index 4601e41e3..14a44a812 100644 --- a/libethcore/EthashAux.cpp +++ b/libethcore/EthashAux.cpp @@ -43,13 +43,19 @@ using namespace eth; const char* DAGChannel::name() { return EthGreen "DAG"; } -Mutex dev::eth::EthashAux::x_this; EthashAux* dev::eth::EthashAux::s_this = nullptr; EthashAux::~EthashAux() { } +EthashAux* EthashAux::get() +{ + static std::once_flag flag; + std::call_once(flag, []{s_this = new EthashAux();}); + return s_this; +} + uint64_t EthashAux::cacheSize(BlockInfo const& _header) { return ethash_get_cachesize((uint64_t)_header.number); diff --git a/libethcore/EthashAux.h b/libethcore/EthashAux.h index 654f898c3..d5bd60d44 100644 --- a/libethcore/EthashAux.h +++ b/libethcore/EthashAux.h @@ -38,7 +38,7 @@ class EthashAux public: ~EthashAux(); - static EthashAux* get() {Guard l(x_this);if (!s_this) s_this = new EthashAux(); return s_this; } + static EthashAux* get(); struct LightAllocation { @@ -89,7 +89,6 @@ private: void killCache(h256 const& _s); - static Mutex x_this; static EthashAux* s_this; SharedMutex x_lights;