Commit 02e0e12529e45a41e46e347920dff80cc6c2b437

Con Kolivas 2011-07-20T10:07:39

Don't waste the work items queued on testing the pools at startup.

diff --git a/main.c b/main.c
index be0129e..37d5306 100644
--- a/main.c
+++ b/main.c
@@ -2550,38 +2550,6 @@ int main (int argc, char *argv[])
 	} else
 		longpoll_thr_id = -1;
 
-	/* Test each pool to see if we can retrieve and use work and for what
-	 * it supports */
-	for (i = 0; i < total_pools; i++) {
-		struct pool *pool;
-		struct work work;
-		json_t *val;
-		CURL *curl;
-
-		curl = curl_easy_init();
-		if (unlikely(!curl)) {
-			applog(LOG_ERR, "CURL initialisation failed");
-			return 1;
-		}
-
-		pool = &pools[i];
-		val = json_rpc_call(curl, pool->rpc_url, pool->rpc_userpass, rpc_req,
-				true, false, pool);
-
-		if (val) {
-			bool rc;
-
-			rc = work_decode(json_object_get(val, "result"), &work);
-			if (rc)
-				applog(LOG_INFO, "Successfully retreived and deciphered work from pool %u %s", i, pool->rpc_url);
-			else
-				applog(LOG_WARNING, "Successfully retreived but FAILED to decipher work from pool %u %s", i, pool->rpc_url);
-			json_decref(val);
-		} else
-			applog(LOG_WARNING, "FAILED to retrieve work from pool %u %s", i, pool->rpc_url);
-		curl_easy_cleanup(curl);
-	}
-
 	if (opt_n_threads ) {
 		cpus = calloc(num_processors, sizeof(struct cgpu_info));
 		if (unlikely(!cpus)) {
@@ -2619,6 +2587,47 @@ int main (int argc, char *argv[])
 		return 1;
 	}
 
+	/* Test each pool to see if we can retrieve and use work and for what
+	 * it supports */
+	for (i = 0; i < total_pools; i++) {
+		struct pool *pool;
+		json_t *val;
+		CURL *curl;
+
+		curl = curl_easy_init();
+		if (unlikely(!curl)) {
+			applog(LOG_ERR, "CURL initialisation failed");
+			return 1;
+		}
+
+		pool = &pools[i];
+		val = json_rpc_call(curl, pool->rpc_url, pool->rpc_userpass, rpc_req,
+				true, false, pool);
+
+		if (val) {
+			struct work *work = malloc(sizeof(struct work));
+			bool rc;
+
+			if (!work)
+				return 1;
+			rc = work_decode(json_object_get(val, "result"), work);
+			if (rc) {
+				applog(LOG_INFO, "Successfully retreived and deciphered work from pool %u %s", i, pool->rpc_url);
+				work->pool = pool;
+				tq_push(thr_info[stage_thr_id].q, work);
+				total_getworks++;
+				pool->getwork_requested++;
+				inc_queued();
+			} else {
+				applog(LOG_WARNING, "Successfully retreived but FAILED to decipher work from pool %u %s", i, pool->rpc_url);
+				free(work);
+			}
+			json_decref(val);
+		} else
+			applog(LOG_WARNING, "FAILED to retrieve work from pool %u %s", i, pool->rpc_url);
+		curl_easy_cleanup(curl);
+	}
+
 #ifdef HAVE_OPENCL
 	i = 0;