Limit rolltime work generation to 10 iterations only.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
diff --git a/main.c b/main.c
index a97f60c..9a21a3b 100644
--- a/main.c
+++ b/main.c
@@ -2034,6 +2034,11 @@ static void flush_requests(void)
}
}
+static inline bool can_roll(struct work *work)
+{
+ return (!stale_work(work) && work->pool->has_rolltime && work->rolls < 11);
+}
+
static bool get_work(struct work *work, bool queued, struct thr_info *thr,
const int thr_id)
{
@@ -2054,7 +2059,7 @@ retry:
goto out;
}
- if (!requests_staged() && !stale_work(work) && work->pool->has_rolltime) {
+ if (!requests_staged() && can_roll(work)) {
uint32_t *work_ntime;
uint32_t ntime;
@@ -2084,6 +2089,7 @@ retry:
*work_ntime = htobe32(ntime);
ret = true;
local_work++;
+ work->rolls++;
goto out;
}
diff --git a/miner.h b/miner.h
index abbb700..b5b7e3e 100644
--- a/miner.h
+++ b/miner.h
@@ -293,9 +293,10 @@ struct work {
unsigned char hash1[64];
unsigned char midstate[32];
unsigned char target[32];
-
unsigned char hash[32];
+ int rolls;
+
uint32_t output[1];
uint32_t res_nonce;
uint32_t valid;