Fix possibility duplicate share for short donation intervals.
This commit is contained in:
parent
c16388ade3
commit
32e7041def
5 changed files with 119 additions and 27 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue