Stratum: reset workers counters on synchronized
This commit is contained in:
@@ -70,6 +70,7 @@ StratumServer::StratumServer(p2pool* pool)
|
|||||||
|
|
||||||
m_hashrateData[0] = { seconds_since_epoch(), 0 };
|
m_hashrateData[0] = { seconds_since_epoch(), 0 };
|
||||||
|
|
||||||
|
uv_mutex_init_checked(&m_resetShareCountersLock);
|
||||||
uv_mutex_init_checked(&m_blobsQueueLock);
|
uv_mutex_init_checked(&m_blobsQueueLock);
|
||||||
uv_mutex_init_checked(&m_showWorkersLock);
|
uv_mutex_init_checked(&m_showWorkersLock);
|
||||||
uv_mutex_init_checked(&m_rngLock);
|
uv_mutex_init_checked(&m_rngLock);
|
||||||
@@ -77,6 +78,9 @@ StratumServer::StratumServer(p2pool* pool)
|
|||||||
|
|
||||||
m_extraNonce = get_random32();
|
m_extraNonce = get_random32();
|
||||||
|
|
||||||
|
uv_async_init_checked(&m_loop, &m_resetShareCountersAsync, on_reset_share_counters);
|
||||||
|
m_resetShareCountersAsync.data = this;
|
||||||
|
|
||||||
uv_async_init_checked(&m_loop, &m_blobsAsync, on_blobs_ready);
|
uv_async_init_checked(&m_loop, &m_blobsAsync, on_blobs_ready);
|
||||||
m_blobsAsync.data = this;
|
m_blobsAsync.data = this;
|
||||||
m_blobsQueue.reserve(2);
|
m_blobsQueue.reserve(2);
|
||||||
@@ -101,6 +105,7 @@ StratumServer::~StratumServer()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uv_mutex_destroy(&m_resetShareCountersLock);
|
||||||
uv_mutex_destroy(&m_blobsQueueLock);
|
uv_mutex_destroy(&m_blobsQueueLock);
|
||||||
uv_mutex_destroy(&m_showWorkersLock);
|
uv_mutex_destroy(&m_showWorkersLock);
|
||||||
uv_mutex_destroy(&m_rngLock);
|
uv_mutex_destroy(&m_rngLock);
|
||||||
@@ -608,6 +613,22 @@ void StratumServer::show_workers()
|
|||||||
|
|
||||||
void StratumServer::reset_share_counters()
|
void StratumServer::reset_share_counters()
|
||||||
{
|
{
|
||||||
|
MutexLock lock(m_resetShareCountersLock);
|
||||||
|
|
||||||
|
if (!uv_is_closing(reinterpret_cast<uv_handle_t*>(&m_resetShareCountersAsync))) {
|
||||||
|
uv_async_send(&m_resetShareCountersAsync);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void StratumServer::on_reset_share_counters()
|
||||||
|
{
|
||||||
|
check_event_loop_thread(__func__);
|
||||||
|
|
||||||
|
for (StratumClient* c = static_cast<StratumClient*>(m_connectedClientsList->m_next); c != m_connectedClientsList; c = static_cast<StratumClient*>(c->m_next)) {
|
||||||
|
c->m_stratumShares = 0;
|
||||||
|
c->m_sidechainShares = 0;
|
||||||
|
}
|
||||||
|
|
||||||
WriteLock lock(m_hashrateDataLock);
|
WriteLock lock(m_hashrateDataLock);
|
||||||
|
|
||||||
m_cumulativeHashesAtLastShare = m_cumulativeHashes;
|
m_cumulativeHashesAtLastShare = m_cumulativeHashes;
|
||||||
@@ -1171,6 +1192,10 @@ void StratumServer::on_after_share_found(uv_work_t* req, int /*status*/)
|
|||||||
|
|
||||||
void StratumServer::on_shutdown()
|
void StratumServer::on_shutdown()
|
||||||
{
|
{
|
||||||
|
{
|
||||||
|
MutexLock lock(m_resetShareCountersLock);
|
||||||
|
uv_close(reinterpret_cast<uv_handle_t*>(&m_resetShareCountersAsync), nullptr);
|
||||||
|
}
|
||||||
{
|
{
|
||||||
MutexLock lock(m_blobsQueueLock);
|
MutexLock lock(m_blobsQueueLock);
|
||||||
uv_close(reinterpret_cast<uv_handle_t*>(&m_blobsAsync), nullptr);
|
uv_close(reinterpret_cast<uv_handle_t*>(&m_blobsAsync), nullptr);
|
||||||
|
|||||||
@@ -131,6 +131,12 @@ private:
|
|||||||
hash m_seedHash;
|
hash m_seedHash;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
uv_mutex_t m_resetShareCountersLock;
|
||||||
|
uv_async_t m_resetShareCountersAsync;
|
||||||
|
|
||||||
|
static void on_reset_share_counters(uv_async_t* handle) { reinterpret_cast<StratumServer*>(handle->data)->on_reset_share_counters(); }
|
||||||
|
void on_reset_share_counters();
|
||||||
|
|
||||||
uv_mutex_t m_blobsQueueLock;
|
uv_mutex_t m_blobsQueueLock;
|
||||||
uv_async_t m_blobsAsync;
|
uv_async_t m_blobsAsync;
|
||||||
std::vector<BlobsData*> m_blobsQueue;
|
std::vector<BlobsData*> m_blobsQueue;
|
||||||
|
|||||||
Reference in New Issue
Block a user