diff --git a/src/base/net/dns/DnsUvBackend.cpp b/src/base/net/dns/DnsUvBackend.cpp index 51ee2193..cb1c0c3e 100644 --- a/src/base/net/dns/DnsUvBackend.cpp +++ b/src/base/net/dns/DnsUvBackend.cpp @@ -29,7 +29,11 @@ namespace xmrig { -Storage DnsUvBackend::m_storage; +Storage& DnsUvBackend::getStorage() +{ + static Storage* storage = new Storage(); + return *storage; +} static addrinfo hints{}; @@ -45,13 +49,13 @@ xmrig::DnsUvBackend::DnsUvBackend() hints.ai_protocol = IPPROTO_TCP; } - m_key = m_storage.add(this); + m_key = getStorage().add(this); } xmrig::DnsUvBackend::~DnsUvBackend() { - m_storage.release(m_key); + getStorage().release(m_key); } @@ -76,7 +80,7 @@ std::shared_ptr xmrig::DnsUvBackend::resolve(const String &ho bool xmrig::DnsUvBackend::resolve(const String &host) { m_req = std::make_shared(); - m_req->data = m_storage.ptr(m_key); + m_req->data = getStorage().ptr(m_key); m_status = uv_getaddrinfo(uv_default_loop(), m_req.get(), DnsUvBackend::onResolved, host.data(), nullptr, &hints); @@ -121,7 +125,7 @@ void xmrig::DnsUvBackend::onResolved(int status, addrinfo *res) void xmrig::DnsUvBackend::onResolved(uv_getaddrinfo_t *req, int status, addrinfo *res) { - auto backend = m_storage.get(req->data); + auto backend = getStorage().get(req->data); if (backend) { backend->onResolved(status, res); } diff --git a/src/base/net/dns/DnsUvBackend.h b/src/base/net/dns/DnsUvBackend.h index f4e6949b..f3733f5a 100644 --- a/src/base/net/dns/DnsUvBackend.h +++ b/src/base/net/dns/DnsUvBackend.h @@ -61,7 +61,7 @@ private: uint64_t m_ts = 0; uintptr_t m_key; - static Storage m_storage; + static Storage& getStorage(); };