Fixed an occasional deadlock on exit with merge mining active

This commit is contained in:
SChernykh
2024-07-22 00:16:41 +02:00
parent 8894da4f93
commit 0bada79b6b
+19 -13
View File
@@ -204,13 +204,14 @@ p2pool::~p2pool()
} }
#endif #endif
std::vector<IMergeMiningClient*> merge_mining_clients;
{ {
WriteLock lock(m_mergeMiningClientsLock); WriteLock lock(m_mergeMiningClientsLock);
merge_mining_clients.swap(m_mergeMiningClients);
}
for (const IMergeMiningClient* c : m_mergeMiningClients) { for (const IMergeMiningClient* c : merge_mining_clients) {
delete c; delete c;
}
m_mergeMiningClients.clear();
} }
uv_rwlock_destroy(&m_mainchainLock); uv_rwlock_destroy(&m_mainchainLock);
@@ -534,6 +535,10 @@ void p2pool::handle_chain_main(ChainMain& data, const char* extra)
void p2pool::update_aux_data(const hash& chain_id) void p2pool::update_aux_data(const hash& chain_id)
{ {
if (m_stopped) {
return;
}
MinerData data; MinerData data;
std::vector<hash> aux_id; std::vector<hash> aux_id;
@@ -1026,17 +1031,18 @@ void p2pool::download_block_headers(uint64_t current_height)
} }
} }
std::vector<IMergeMiningClient*> merge_mining_clients;
for (const auto& h : m_params->m_mergeMiningHosts) {
IMergeMiningClient* c = IMergeMiningClient::create(this, h.m_host, h.m_wallet);
if (c) {
merge_mining_clients.push_back(c);
}
}
{ {
WriteLock lock(m_mergeMiningClientsLock); WriteLock lock(m_mergeMiningClientsLock);
m_mergeMiningClients = merge_mining_clients;
m_mergeMiningClients.clear();
for (const auto& h : m_params->m_mergeMiningHosts) {
IMergeMiningClient* c = IMergeMiningClient::create(this, h.m_host, h.m_wallet);
if (c) {
m_mergeMiningClients.push_back(c);
}
}
} }
m_startupFinished = true; m_startupFinished = true;