Browse Source

Load balancing puts more into the current pool if there are disabled pools. Fix.

Con Kolivas 14 years ago
parent
commit
afcff07012
1 changed files with 16 additions and 9 deletions
  1. 16 9
      main.c

+ 16 - 9
main.c

@@ -929,22 +929,29 @@ out_nofree:
 static const char *rpc_req =
 	"{\"method\": \"getwork\", \"params\": [], \"id\":0}\r\n";
 
-static int rotating_pool;
-
 /* Select any active pool in a rotating fashion when loadbalance is chosen */
 static inline struct pool *select_pool(void)
 {
-	if (pool_strategy == POOL_LOADBALANCE) {
-		struct pool *pool;
+	static int rotating_pool;
+	struct pool *pool, *cp;
+
+	cp = current_pool();
+
+	if (pool_strategy != POOL_LOADBALANCE)
+		pool = cp;
+	else
+		pool = NULL;
 
-		rotating_pool++;
-		if (rotating_pool >= total_pools)
+	while (!pool) {
+		if (++rotating_pool >= total_pools)
 			rotating_pool = 0;
 		pool = pools[rotating_pool];
-		if (!pool->idle && pool->enabled)
-			return pools[rotating_pool];
+		if ((!pool->idle && pool->enabled) || pool == cp)
+			break;
+		pool = NULL;
 	}
-	return current_pool();
+
+	return pool;
 }
 
 static bool get_upstream_work(struct work *work)