diff --git a/cgminer.c b/cgminer.c index c7e913e1..70c7d5ec 100644 --- a/cgminer.c +++ b/cgminer.c @@ -3318,14 +3318,14 @@ static void wake_gws(void) mutex_unlock(stgd_lock); } -static void discard_stale(void) +static void discard_stale(bool all) { struct work *work, *tmp; int stale = 0; mutex_lock(stgd_lock); HASH_ITER(hh, staged_work, work, tmp) { - if (stale_work(work, false)) { + if (all || stale_work(work, false)) { HASH_DEL(staged_work, work); discard_work(work); stale++; @@ -3363,7 +3363,7 @@ int restart_wait(unsigned int mstime) return rc; } -static void restart_threads(void) +static void restart_threads(bool all) { struct pool *cp = current_pool(); int i; @@ -3373,7 +3373,7 @@ static void restart_threads(void) pool_tset(cp, &cp->lagging); /* Discard staged work that is now stale */ - discard_stale(); + discard_stale(all); for (i = 0; i < mining_threads; i++) thr_info[i].work_restart = true; @@ -3497,13 +3497,13 @@ static bool test_work_current(struct work *work) else applog(LOG_NOTICE, "New block detected on network"); } - restart_threads(); + restart_threads(false); } else if (work->longpoll) { work->work_block = ++work_block; if (work->pool == current_pool()) { applog(LOG_NOTICE, "%sLONGPOLL from pool %d requested work restart", work->gbt ? "GBT " : "", work->pool->pool_no); - restart_threads(); + restart_threads(true); } } work->longpoll = false; @@ -4616,7 +4616,7 @@ static void *stratum_thread(void *userdata) /* Only accept a work restart if this stratum * connection is from the current pool */ if (pool == current_pool()) { - restart_threads(); + restart_threads(true); applog(LOG_NOTICE, "Stratum from pool %d requested work restart", pool->pool_no); } } else @@ -5700,7 +5700,7 @@ static void *watchdog_thread(void __maybe_unused *userdata) sleep(interval); - discard_stale(); + discard_stale(false); hashmeter(-1, &zero_tv, 0);