Add ability to disable pools in config file. Also fix pool writing in priorty order.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
diff --git a/cgminer.c b/cgminer.c
index 58657fc..bf8db76 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -192,11 +192,11 @@ unsigned int total_go, total_ro;
struct pool *pools[MAX_POOLS];
static struct pool *currentpool = NULL;
-
+enum pool_enable opt_pool_enabled = POOL_ENABLED;
int total_pools;
enum pool_strategy pool_strategy = POOL_FAILOVER;
int opt_rotate_period;
-static int total_urls, total_users, total_passes, total_userpasses;
+static int total_urls = 0, total_users = 0, total_passes = 0, total_userpasses = 0;
#ifndef HAVE_CURSES
const
@@ -405,6 +405,9 @@ static struct pool *add_pool(void)
/* Make sure the pool doesn't think we've been idle since time 0 */
pool->tv_idle.tv_sec = ~0UL;
+ pool->enabled = POOL_ENABLED;
+ pool->idle = true;
+
return pool;
}
@@ -590,6 +593,18 @@ static char *set_userpass(const char *arg)
return NULL;
}
+static char *set_pool_disabled(enum pool_enable *pool_state)
+{
+ struct pool *pool;
+ *pool_state = POOL_DISABLED; // This (and opt_pool_enabled) does nothing. Here for compatability
+
+ if (total_pools) {
+ pool = pools[total_pools - 1];
+ pool->enabled = POOL_DISABLED;
+ }
+ return NULL;
+}
+
static char *enable_debug(bool *flag)
{
*flag = true;
@@ -986,6 +1001,9 @@ static struct opt_table opt_config_table[] = {
OPT_WITH_ARG("--userpass|-O",
set_userpass, NULL, NULL,
"Username:Password pair for bitcoin JSON-RPC server"),
+ OPT_WITHOUT_ARG("--disable-pool",
+ set_pool_disabled, &opt_pool_enabled,
+ "Start with pool disabled."),
OPT_WITH_ARG("--pools",
opt_set_bool, NULL, NULL, opt_hidden),
OPT_ENDTABLE
@@ -2696,14 +2714,17 @@ void write_config(FILE *fcfg)
{
int i = 0;
int j = 0;
+ char *s;
/* Write pool values in priority order */
fputs("{\n\"pools\" : [", fcfg);
while((j < total_pools) && (i < total_pools)) {
if(pools[i]->prio == j) {
- fprintf(fcfg, "%s\n\t{\n\t\t\"url\" : \"%s\",", i > 0 ? "," : "", pools[i]->rpc_url);
+ fprintf(fcfg, "\n\t{\n\t\t\"url\" : \"%s\",", pools[i]->rpc_url);
fprintf(fcfg, "\n\t\t\"user\" : \"%s\",", pools[i]->rpc_user);
- fprintf(fcfg, "\n\t\t\"pass\" : \"%s\"\n\t}", pools[i]->rpc_pass);
+ fprintf(fcfg, "\n\t\t\"pass\" : \"%s\"", pools[i]->rpc_pass);
+ s = (pools[i]->enabled == POOL_DISABLED) ? ",\n\t\t\"disable-pool\" : true\n\t}%s" : "\n\t}%s";
+ fprintf(fcfg, s, (j < total_pools - 1) ? "," : "");
j++;
i=0;
} else
@@ -5118,8 +5139,14 @@ int main(int argc, char *argv[])
quit(1, "Failed to find colon delimiter in userpass");
}
}
- /* Set the currentpool to pool 0 */
- currentpool = pools[0];
+ /* Set the currentpool to pool first enabled */
+ for (i = 0; i < total_pools; i++) {
+ currentpool = pools[i];
+ if (currentpool->enabled == POOL_ENABLED)
+ break;
+ }
+ if (i == total_pools)
+ quit(1, "All pools disabled!");
#ifdef HAVE_SYSLOG_H
if (use_syslog)
@@ -5172,13 +5199,6 @@ int main(int argc, char *argv[])
if (opt_benchmark)
goto begin_bench;
- for (i = 0; i < total_pools; i++) {
- struct pool *pool = pools[i];
-
- pool->enabled = POOL_ENABLED;
- pool->idle = true;
- }
-
applog(LOG_NOTICE, "Probing for an alive pool");
do {
/* Look for at least one active pool before starting */