Browse Source

Cope with pools being removed in the stratum thread.

Con Kolivas 13 years ago
parent
commit
04551445f6
1 changed files with 13 additions and 3 deletions
  1. 13 3
      cgminer.c

+ 13 - 3
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;
 }