Cope with pools being removed in the stratum thread.
diff --git a/cgminer.c b/cgminer.c
index 6a8e095..9473121 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -3978,9 +3978,13 @@ static void *stratum_thread(void *userdata)
pool->stratum_active = pool->stratum_auth = false;
applog(LOG_WARNING, "Stratum connection to pool %d interrupted", pool->pool_no);
pool->getfail_occasions++;
- if (!initiate_stratum(pool) || !auth_stratum(pool)) {
- pool_died(pool);
- break;
+ total_go++;
+ while (!initiate_stratum(pool) || !auth_stratum(pool)) {
+ if (!pool->idle)
+ pool_died(pool);
+ if (pool->removed)
+ goto out;
+ sleep(5);
}
}
s = recv_line(pool->sock);
@@ -3989,8 +3993,14 @@ static void *stratum_thread(void *userdata)
if (!parse_stratum(pool, s)) /* Create message queues here */
applog(LOG_INFO, "Unknown stratum msg: %s", s);
free(s);
+
+ if (unlikely(pool->removed)) {
+ CLOSESOCKET(pool->sock);
+ goto out;
+ }
}
+out:
return NULL;
}