Fix max-nonce auto-adjustment logic to actually work
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
diff --git a/cpu-miner.c b/cpu-miner.c
index 5097958..f288471 100644
--- a/cpu-miner.c
+++ b/cpu-miner.c
@@ -54,7 +54,7 @@ static const char *algo_names[] = {
bool opt_debug = false;
bool opt_protocol = false;
-bool opt_quiet = false;
+static bool opt_quiet = false;
static int opt_retries = 10;
static int opt_fail_pause = 30;
static int opt_scantime = 5;
@@ -258,12 +258,12 @@ static void *miner_thread(void *thr_id_int)
int failures = 0;
static const char *rpc_req =
"{\"method\": \"getwork\", \"params\": [], \"id\":0}\r\n";
+ uint32_t max_nonce = 0xffffff;
while (1) {
struct work work __attribute__((aligned(128)));
unsigned long hashes_done;
struct timeval tv_start, tv_end, diff;
- uint32_t max_nonce = 0xffffff;
json_t *val;
bool rc;
@@ -360,14 +360,12 @@ static void *miner_thread(void *thr_id_int)
/* adjust max_nonce to meet target scan time */
if (diff.tv_sec > (opt_scantime * 2))
max_nonce /= 2; /* large decrease */
- else if (diff.tv_sec > opt_scantime)
- max_nonce -= 1000; /* small decrease */
- else if (diff.tv_sec < (opt_scantime - 1))
- max_nonce += 1000; /* small increase */
-
- /* catch stupidly slow cases, such as simulators */
- if (max_nonce < 1000)
- max_nonce = 1000;
+ else if ((diff.tv_sec > opt_scantime) &&
+ (max_nonce > 1500000))
+ max_nonce -= 1000000; /* small decrease */
+ else if ((diff.tv_sec < opt_scantime) &&
+ (max_nonce < 0xffffec76))
+ max_nonce += 100000; /* small increase */
/* if nonce found, submit work */
if (rc)