Icarus - ignore hardware errors in timing mode
diff --git a/driver-icarus.c b/driver-icarus.c
index f1cf9d1..33b875d 100644
--- a/driver-icarus.c
+++ b/driver-icarus.c
@@ -639,7 +639,8 @@ static int64_t icarus_scanhash(struct thr_info *thr, struct work *work,
struct timeval tv_start, tv_finish, elapsed;
struct timeval tv_history_start, tv_history_finish;
double Ti, Xi;
- int i;
+ int curr_hw_errors, i;
+ bool was_hw_error;
struct ICARUS_HISTORY *history0, *history;
int count;
@@ -712,7 +713,9 @@ static int64_t icarus_scanhash(struct thr_info *thr, struct work *work,
nonce = swab32(nonce);
#endif
+ curr_hw_errors = icarus->hw_errors;
submit_nonce(thr, work, nonce);
+ was_hw_error = (curr_hw_errors > icarus->hw_errors);
hash_count = (nonce & info->nonce_mask);
hash_count++;
@@ -726,8 +729,9 @@ static int64_t icarus_scanhash(struct thr_info *thr, struct work *work,
icarus->device_id, nonce, hash_count, elapsed.tv_sec, elapsed.tv_usec);
}
- // ignore possible end condition values
+ // ignore possible end condition values ... and hw errors
if (info->do_icarus_timing
+ && !was_hw_error
&& ((nonce & info->nonce_mask) > END_CONDITION)
&& ((nonce & info->nonce_mask) < (info->nonce_mask & ~END_CONDITION))) {
gettimeofday(&tv_history_start, NULL);