mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-23 13:04:29 +00:00
Check we don't exhaust the entire unsigned 32 bit ntime range when rolling time to cope with extremely high hashrates.
This commit is contained in:
parent
fab619ad38
commit
522f620c89
11
cgminer.c
11
cgminer.c
@ -3646,13 +3646,17 @@ static inline bool can_roll(struct work *work)
|
|||||||
return (work->pool && !stale_work(work, false) && work->rolltime && !work->clone);
|
return (work->pool && !stale_work(work, false) && work->rolltime && !work->clone);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void roll_work(struct work *work)
|
static bool roll_work(struct work *work)
|
||||||
{
|
{
|
||||||
uint32_t *work_ntime;
|
uint32_t *work_ntime;
|
||||||
uint32_t ntime;
|
uint32_t ntime;
|
||||||
|
|
||||||
work_ntime = (uint32_t *)(work->data + 68);
|
work_ntime = (uint32_t *)(work->data + 68);
|
||||||
ntime = be32toh(*work_ntime);
|
ntime = be32toh(*work_ntime);
|
||||||
|
if (unlikely(ntime == 0xFFFFFFFF)) {
|
||||||
|
applog(LOG_DEBUG, "Exhausted ntime space, cannot roll work");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
ntime++;
|
ntime++;
|
||||||
*work_ntime = htobe32(ntime);
|
*work_ntime = htobe32(ntime);
|
||||||
local_work++;
|
local_work++;
|
||||||
@ -3663,13 +3667,14 @@ static void roll_work(struct work *work)
|
|||||||
/* This is now a different work item so it needs a different ID for the
|
/* This is now a different work item so it needs a different ID for the
|
||||||
* hashtable */
|
* hashtable */
|
||||||
work->id = total_work++;
|
work->id = total_work++;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool reuse_work(struct work *work)
|
static bool reuse_work(struct work *work)
|
||||||
{
|
{
|
||||||
if (can_roll(work) && should_roll(work)) {
|
if (can_roll(work) && should_roll(work)) {
|
||||||
roll_work(work);
|
if (likely(roll_work(work)))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user