diff --git a/driver-bflsc.c b/driver-bflsc.c index 8b76f206..7fb91f91 100644 --- a/driver-bflsc.c +++ b/driver-bflsc.c @@ -1387,6 +1387,7 @@ static void *bflsc_get_results(void *userdata) struct cgpu_info *bflsc = (struct cgpu_info *)userdata; struct bflsc_info *sc_info = (struct bflsc_info *)(bflsc->device_data); struct timeval elapsed, now; + cgtimer_t ts_start; float oldest, f; char buf[BFLSC_BUFSIZ+1]; int err, amount; @@ -1401,14 +1402,13 @@ static void *bflsc_get_results(void *userdata) } while (sc_info->shutdown == false) { - cgtimer_t ts_start; - if (bflsc->usbinfo.nodev) return NULL; dev = -1; oldest = FLT_MAX; - cgtime(&now); + cgsleep_prepare_r(&ts_start); + cgtimer_to_timeval(&now, &ts_start); // Find the first oldest ... that also needs checking for (i = 0; i < sc_info->sc_count; i++) { @@ -1420,10 +1420,12 @@ static void *bflsc_get_results(void *userdata) } } - if (bflsc->usbinfo.nodev) + if (bflsc->usbinfo.nodev) { + /* To clean up the setup timer */ + cgsleep_ms_r(&ts_start, 0); return NULL; + } - cgsleep_prepare_r(&ts_start); if (dev == -1) { /* Sleep for only half a work period before checking * again. */ @@ -1431,7 +1433,7 @@ static void *bflsc_get_results(void *userdata) continue; } - cgtime(&(sc_info->sc_devs[dev].last_check_result)); + copy_time(&sc_info->sc_devs[dev].last_check_result, &now); readok = bflsc_qres(bflsc, buf, sizeof(buf), dev, &err, &amount, false); if (err < 0 || (!readok && amount != BFLSC_QRES_LEN) || (readok && amount < 1)) { @@ -1439,10 +1441,13 @@ static void *bflsc_get_results(void *userdata) } else { que = process_results(bflsc, dev, buf, &nonces); sc_info->not_first_work = true; // in case it failed processing it - if (que > 0) - cgtime(&(sc_info->sc_devs[dev].last_dev_result)); - if (nonces > 0) - cgtime(&(sc_info->sc_devs[dev].last_nonce_result)); + if (que > 0 || nonces > 0) { + cgtime(&now); + if (que > 0) + copy_time(&sc_info->sc_devs[dev].last_dev_result, &now); + if (nonces > 0) + copy_time(&sc_info->sc_devs[dev].last_nonce_result, &now); + } // TODO: if not getting results ... reinit? }