diff --git a/cgminer.c b/cgminer.c index 75a28244..21f3f1ef 100644 --- a/cgminer.c +++ b/cgminer.c @@ -126,7 +126,7 @@ bool use_curses = true; #else bool use_curses; #endif -static bool opt_submit_stale = true; +bool opt_submit_stale = true; static int opt_shares; static bool opt_fail_only; bool opt_autofan; diff --git a/driver-bitforce.c b/driver-bitforce.c index 110d06f0..44c4a476 100644 --- a/driver-bitforce.c +++ b/driver-bitforce.c @@ -343,20 +343,28 @@ static void biforce_thread_enable(struct thr_info *thr) bitforce_init(bitforce); } +extern bool opt_submit_stale; + static uint64_t bitforce_scanhash(struct thr_info *thr, struct work *work, uint64_t __maybe_unused max_nonce) { struct cgpu_info *bitforce = thr->cgpu; + bool submit_old = work->pool->submit_old; bitforce->wait_ms = 0; uint64_t ret; if (ret = bitforce_send_work(thr, work)) { - while (bitforce->wait_ms < bitforce->sleep_ms) { - usleep(WORK_CHECK_INTERVAL_MS*1000); - bitforce->wait_ms += WORK_CHECK_INTERVAL_MS; - if (work_restart[thr->id].restart) { - applog(LOG_DEBUG, "BFL%i: Work restart, discarding after %dms", bitforce->device_id, bitforce->wait_ms); - return 1; //we have discarded all work; equivilent to 0 hashes done. + if(!opt_submit_stale || !submit_old) { + while (bitforce->wait_ms < bitforce->sleep_ms) { + usleep(WORK_CHECK_INTERVAL_MS*1000); + bitforce->wait_ms += WORK_CHECK_INTERVAL_MS; + if (work_restart[thr->id].restart) { + applog(LOG_DEBUG, "BFL%i: Work restart, discarding after %dms", bitforce->device_id, bitforce->wait_ms); + return 1; //we have discarded all work; equivilent to 0 hashes done. + } } + } else { + usleep(bitforce->sleep_ms*1000); + bitforce->wait_ms = bitforce->sleep_ms; } ret = bitforce_get_result(thr, work); }