Fix possibility duplicate share for short donation intervals.

This commit is contained in:
XMRig 2017-07-03 03:34:23 +03:00
parent c16388ade3
commit 32e7041def
5 changed files with 119 additions and 27 deletions

View file

@ -68,15 +68,32 @@ void SingleWorker::start()
}
bool SingleWorker::resume(const Job &job)
{
if (m_job.poolId() == -1 && job.poolId() >= 0 && memcmp(job.id(), m_paused.id(), 64) == 0) {
m_job = m_paused;
m_result = m_job;
m_result.nonce = *m_job.nonce();
return true;
}
return false;
}
void SingleWorker::consumeJob()
{
m_job = Workers::job();
Job job = Workers::job();
m_sequence = Workers::sequence();
memcpy(m_result.jobId, m_job.id(), sizeof(m_result.jobId));
m_result.poolId = m_job.poolId();
m_result.diff = m_job.diff();
save(job);
if (resume(job)) {
return;
}
m_job = std::move(job);
m_result = m_job;
if (m_job.isNicehash()) {
m_result.nonce = (*m_job.nonce() & 0xff000000U) + (0xffffffU / m_threads * m_id);
@ -85,3 +102,11 @@ void SingleWorker::consumeJob()
m_result.nonce = 0xffffffffU / m_threads * m_id;
}
}
void SingleWorker::save(const Job &job)
{
if (job.poolId() == -1 && m_job.poolId() >= 0) {
m_paused = m_job;
}
}