Commit 0cddd1ab54921c95a219bb72278a8daa08642b85

Con Kolivas 2012-10-06T12:17:46

Only set the stratum auth flag once and once the stratum thread is started, use that to set/unset the stratum active flag.

diff --git a/cgminer.c b/cgminer.c
index b40a77a..3e19028 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -4152,7 +4152,7 @@ static void *stratum_thread(void *userdata)
 		FD_SET(pool->sock, &rd);
 
 		if (select(pool->sock + 1, &rd, NULL, NULL, NULL) < 0) {
-			pool->stratum_active = pool->stratum_auth = false;
+			pool->stratum_active = false;
 			applog(LOG_WARNING, "Stratum connection to pool %d interrupted", pool->pool_no);
 			pool->getfail_occasions++;
 			total_go++;
@@ -4231,16 +4231,17 @@ static bool pool_active(struct pool *pool, bool pinging)
 	/* This is the central point we activate stratum when we can */
 retry_stratum:
 	if (pool->has_stratum) {
-		if ((!pool->stratum_active || pinging) && !initiate_stratum(pool))
+		/* We create the stratum thread for each pool just after
+		 * successful authorisation. Once the auth flag has been set
+		 * we never unset it and the stratum thread is responsible for
+		 * setting/unsetting the active flag */
+		if (pool->stratum_auth)
+			return pool->stratum_active;
+		if (!pool->stratum_active && !initiate_stratum(pool))
 			return false;
-		if (!pool->stratum_auth) {
-			if (!auth_stratum(pool))
-				return false;
-			/* We create the stratum thread for each pool just
-			 * after successful authorisation */
-			init_stratum_thread(pool);
-			return true;
-		}
+		if (!auth_stratum(pool))
+			return false;
+		init_stratum_thread(pool);
 		return true;
 	}