From 3b84131f10811c0273b0b678c84c3bdbd3a93ade Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Sat, 9 Mar 2013 09:07:20 +1100 Subject: [PATCH] Keep a connection open on higher priority stratum pools to fail back to them. --- cgminer.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/cgminer.c b/cgminer.c index e1d700d7..c3a019c0 100644 --- a/cgminer.c +++ b/cgminer.c @@ -4802,6 +4802,16 @@ static void clear_pool_work(struct pool *pool) mutex_unlock(stgd_lock); } +static int cp_prio(void) +{ + int prio; + + mutex_lock(&control_lock); + prio = currentpool->prio; + mutex_unlock(&control_lock); + return prio; +} + /* We only need to maintain a secondary pool connection when we need the * capacity to get work from the backup pools while still on the primary */ static bool cnx_needed(struct pool *pool) @@ -4829,6 +4839,11 @@ static bool cnx_needed(struct pool *pool) * connection open. */ if (pool->sshares) return true; + /* If the pool has only just come to life and is higher priority than + * the current pool keep the connection open so we can fail back to + * it. */ + if (pool_strategy == POOL_FAILOVER && pool->prio < cp_prio()) + return true; return false; } @@ -5173,19 +5188,9 @@ out: return ret; } -static inline int cp_prio(void) -{ - int prio; - - mutex_lock(&control_lock); - prio = currentpool->prio; - mutex_unlock(&control_lock); - return prio; -} - static void pool_resus(struct pool *pool) { - if (pool->prio < cp_prio() && pool_strategy == POOL_FAILOVER) { + if (pool_strategy == POOL_FAILOVER && pool->prio < cp_prio()) { applog(LOG_WARNING, "Pool %d %s alive", pool->pool_no, pool->rpc_url); switch_pools(NULL); } else