Modify cgminer.c pool control to allow API to call it
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 109 110 111 112 113 114 115 116
diff --git a/cgminer.c b/cgminer.c
index 970b224..828a11e 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -2272,7 +2272,7 @@ int curses_int(const char *query)
static bool input_pool(bool live);
-static int active_pools(void)
+int active_pools(void)
{
int ret = 0;
int i;
@@ -4051,10 +4051,43 @@ char *curses_input(const char *query)
return input;
}
+int add_pool_details(bool live, char *url, char *user, char *pass)
+{
+ struct pool *pool = NULL;
+
+ if (total_pools == MAX_POOLS)
+ return ADD_POOL_MAXIMUM;
+
+ pool = calloc(sizeof(struct pool), 1);
+ if (!pool)
+ quit(1, "Failed to realloc pools in add_pool_details");
+ pool->pool_no = total_pools;
+ pool->prio = total_pools;
+ if (unlikely(pthread_mutex_init(&pool->pool_lock, NULL)))
+ quit (1, "Failed to pthread_mutex_init in input_pool");
+ pool->rpc_url = url;
+ pool->rpc_user = user;
+ pool->rpc_pass = pass;
+ pool->rpc_userpass = malloc(strlen(pool->rpc_user) + strlen(pool->rpc_pass) + 2);
+ if (!pool->rpc_userpass)
+ quit(1, "Failed to malloc userpass");
+ sprintf(pool->rpc_userpass, "%s:%s", pool->rpc_user, pool->rpc_pass);
+
+ pool->tv_idle.tv_sec = ~0UL;
+
+ /* Test the pool is not idle if we're live running, otherwise
+ * it will be tested separately */
+ pool->enabled = true;
+ if (live && !pool_active(pool, false))
+ pool->idle = true;
+ pools[total_pools++] = pool;
+
+ return ADD_POOL_OK;
+}
+
static bool input_pool(bool live)
{
char *url = NULL, *user = NULL, *pass = NULL;
- struct pool *pool = NULL;
bool ret = false;
immedok(logwin, true);
@@ -4089,30 +4122,7 @@ static bool input_pool(bool live)
if (!pass)
goto out;
- pool = calloc(sizeof(struct pool), 1);
- if (!pool)
- quit(1, "Failed to realloc pools in input_pool");
- pool->pool_no = total_pools;
- pool->prio = total_pools;
- if (unlikely(pthread_mutex_init(&pool->pool_lock, NULL)))
- quit (1, "Failed to pthread_mutex_init in input_pool");
- pool->rpc_url = url;
- pool->rpc_user = user;
- pool->rpc_pass = pass;
- pool->rpc_userpass = malloc(strlen(pool->rpc_user) + strlen(pool->rpc_pass) + 2);
- if (!pool->rpc_userpass)
- quit(1, "Failed to malloc userpass");
- sprintf(pool->rpc_userpass, "%s:%s", pool->rpc_user, pool->rpc_pass);
-
- pool->tv_idle.tv_sec = ~0UL;
-
- /* Test the pool is not idle if we're live running, otherwise
- * it will be tested separately */
- ret = true;
- pool->enabled = true;
- if (live && !pool_active(pool, false))
- pool->idle = true;
- pools[total_pools++] = pool;
+ ret = (add_pool_details(live, url, user, pass) == ADD_POOL_OK);
out:
immedok(logwin, false);
@@ -4123,8 +4133,6 @@ out:
free(user);
if (pass)
free(pass);
- if (pool)
- free(pool);
}
return ret;
}
diff --git a/miner.h b/miner.h
index a08789c..2e308fe 100644
--- a/miner.h
+++ b/miner.h
@@ -465,6 +465,12 @@ extern int set_memoryclock(int gpu, int iMemoryClock);
extern void api(int thr_id);
+extern int active_pools(void);
+extern int add_pool_details(bool live, char *url, char *user, char *pass);
+
+#define ADD_POOL_MAXIMUM 1
+#define ADD_POOL_OK 0
+
#define MAX_GPUDEVICES 16
#define MAX_DEVICES 32
#define MAX_POOLS (32)