diff --git a/cgminer.c b/cgminer.c index 7eeb1bca..23b2aca7 100644 --- a/cgminer.c +++ b/cgminer.c @@ -3725,6 +3725,7 @@ static void stage_work(struct work *work) { applog(LOG_DEBUG, "Pushing work from pool %d to hash queue", work->pool->pool_no); work->work_block = work_block; + work->pool->last_work_time = time(NULL); test_work_current(work); hash_push(work); } @@ -4760,6 +4761,10 @@ static bool cnx_needed(struct pool *pool) return true; if (!cp->has_gbt && !cp->has_stratum && (!opt_fail_only || !cp->hdr_path)) return true; + /* Keep the connection open to allow any stray shares to be submitted + * on switching pools for 2 minutes. */ + if (time(NULL) < pool->last_work_time + 120) + return true; return false; } diff --git a/miner.h b/miner.h index df30e124..5be502f8 100644 --- a/miner.h +++ b/miner.h @@ -970,6 +970,7 @@ struct pool { pthread_cond_t cr_cond; struct list_head curlring; + time_t last_work_time; time_t last_share_time; double last_share_diff; uint64_t best_diff;