Browse Source

Merge commit 'b6e3d5b' into cg_merges_20130513

Luke Dashjr 12 years ago
parent
commit
d4bacef58c
3 changed files with 40 additions and 38 deletions
  1. 38 36
      miner.c
  2. 1 1
      miner.h
  3. 1 1
      util.c

+ 38 - 36
miner.c

@@ -7947,7 +7947,35 @@ char *curses_input(const char *query)
 }
 #endif
 
-void add_pool_details(struct pool *pool, bool live, char *url, char *user, char *pass)
+static bool pools_active = false;
+
+static void *test_pool_thread(void *arg)
+{
+	struct pool *pool = (struct pool *)arg;
+
+	if (pool_active(pool, false)) {
+		pool_tset(pool, &pool->lagging);
+		pool_tclear(pool, &pool->idle);
+
+		cg_wlock(&control_lock);
+		if (!pools_active) {
+			currentpool = pool;
+			if (pool->pool_no != 0)
+				applog(LOG_NOTICE, "Switching to pool %d %s - first alive pool", pool->pool_no, pool->rpc_url);
+			pools_active = true;
+		}
+		cg_wunlock(&control_lock);
+		pool_resus(pool);
+	} else
+		pool_died(pool);
+
+	return NULL;
+}
+
+/* Always returns true that the pool details were added unless we are not
+ * live, implying this is the only pool being added, so if no pools are
+ * active it returns false. */
+bool add_pool_details(struct pool *pool, bool live, char *url, char *user, char *pass)
 {
 	pool->rpc_url = url;
 	pool->rpc_user = user;
@@ -7957,17 +7985,17 @@ void add_pool_details(struct pool *pool, bool live, char *url, char *user, char
 		quit(1, "Failed to malloc userpass");
 	sprintf(pool->rpc_userpass, "%s:%s", pool->rpc_user, pool->rpc_pass);
 
+	pool->testing = true;
+	pool->idle = true;
 	enable_pool(pool);
 
-	/* Prevent noise on startup */
-	pool->lagging = true;
-
-	/* Test the pool is not idle if we're live running, otherwise
-	 * it will be tested separately */
-	if (live && !pool_active(pool, false)) {
-		gettimeofday(&pool->tv_idle, NULL);
-		pool->idle = true;
+	pthread_create(&pool->test_thread, NULL, test_pool_thread, (void *)pool);
+	if (!live) {
+		pthread_join(pool->test_thread, NULL);
+		pool->testing = false;
+		return pools_active;
 	}
+	return true;
 }
 
 #ifdef HAVE_CURSES
@@ -8007,8 +8035,7 @@ static bool input_pool(bool live)
 		url = httpinput;
 	}
 
-	add_pool_details(pool, live, url, user, pass);
-	ret = true;
+	ret = add_pool_details(pool, live, url, user, pass);
 out:
 	immedok(logwin, false);
 
@@ -8215,31 +8242,6 @@ extern void setup_pthread_cancel_workaround();
 extern struct sigaction pcwm_orig_term_handler;
 #endif
 
-static bool pools_active = false;
-
-static void *test_pool_thread(void *arg)
-{
-	struct pool *pool = (struct pool *)arg;
-
-	if (pool_active(pool, false)) {
-		pool_tset(pool, &pool->lagging);
-		pool_tclear(pool, &pool->idle);
-
-		cg_wlock(&control_lock);
-		if (!pools_active) {
-			currentpool = pool;
-			if (pool->pool_no != 0)
-				applog(LOG_NOTICE, "Switching to pool %d %s - first alive pool", pool->pool_no, pool->rpc_url);
-			pools_active = true;
-		}
-		cg_wunlock(&control_lock);
-		pool_resus(pool);
-	} else
-		pool_died(pool);
-
-	return NULL;
-}
-
 static void probe_pools(void)
 {
 	int i;

+ 1 - 1
miner.h

@@ -904,7 +904,7 @@ extern int enabled_pools;
 extern bool detect_stratum(struct pool *pool, char *url);
 extern void print_summary(void);
 extern struct pool *add_pool(void);
-extern void add_pool_details(struct pool *pool, bool live, char *url, char *user, char *pass);
+extern bool add_pool_details(struct pool *pool, bool live, char *url, char *user, char *pass);
 
 #define MAX_GPUDEVICES 16
 

+ 1 - 1
util.c

@@ -1747,7 +1747,7 @@ bool auth_stratum(struct pool *pool)
 			ss = json_dumps(err_val, JSON_INDENT(3));
 		else
 			ss = strdup("(unknown reason)");
-		applog(LOG_WARNING, "JSON stratum auth failed: %s", ss);
+		applog(LOG_WARNING, "pool %d JSON stratum auth failed: %s", pool->pool_no, ss);
 		free(ss);
 
 		goto out;