diff --git a/miner.h b/miner.h index be1be447..ebdc5795 100644 --- a/miner.h +++ b/miner.h @@ -1419,6 +1419,7 @@ extern bool log_curses_only(int prio, const char *datetime, const char *str); extern void clear_logwin(void); extern void logwin_update(void); extern bool pool_tclear(struct pool *pool, bool *var); +extern void pool_failed(struct pool *pool); extern struct thread_q *tq_new(void); extern void tq_free(struct thread_q *tq); extern bool tq_push(struct thread_q *tq, void *data); diff --git a/sgminer.c b/sgminer.c index e3854ad3..dfa5cc23 100644 --- a/sgminer.c +++ b/sgminer.c @@ -3609,6 +3609,16 @@ struct work *copy_work_noffset(struct work *base_work, int noffset) return work; } +void pool_failed(struct pool *pool) +{ + if (!pool_tset(pool, &pool->idle)) { + cgtime(&pool->tv_idle); + if (pool == current_pool()) { + switch_pools(NULL); + } + } +} + static void pool_died(struct pool *pool) { if (!pool_tset(pool, &pool->idle)) { diff --git a/util.c b/util.c index 692b92a2..8f0c20d7 100644 --- a/util.c +++ b/util.c @@ -1743,8 +1743,10 @@ static bool parse_reconnect(struct pool *pool, json_t *val) free(tmp); mutex_unlock(&pool->stratum_lock); - if (!restart_stratum(pool)) + if (!restart_stratum(pool)) { + pool_failed(pool); return false; + } return true; }