mirror of
https://github.com/GOSTSec/ccminer
synced 2025-01-25 22:14:30 +00:00
multipool: allow failover switch from getwork
This commit is contained in:
parent
0618c2abc3
commit
692041aa74
28
ccminer.cpp
28
ccminer.cpp
@ -1213,15 +1213,11 @@ static void *workio_thread(void *userdata)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ok && pool_is_switching) {
|
if (!ok && num_pools > 1 && opt_pool_failover) {
|
||||||
if (opt_debug_threads)
|
|
||||||
applog(LOG_DEBUG, "%s died during switch, recovering", __func__);
|
|
||||||
ok = true;
|
|
||||||
}
|
|
||||||
if (!ok && num_pools > 1) {
|
|
||||||
if (opt_debug_threads)
|
if (opt_debug_threads)
|
||||||
applog(LOG_DEBUG, "%s died, failover", __func__);
|
applog(LOG_DEBUG, "%s died, failover", __func__);
|
||||||
ok = true;
|
ok = pool_switch_next();
|
||||||
|
tq_push(wc->thr->q, NULL); // get_work() will return false
|
||||||
}
|
}
|
||||||
|
|
||||||
workio_cmd_free(wc);
|
workio_cmd_free(wc);
|
||||||
@ -1481,6 +1477,7 @@ static bool wanna_mine(int thr_id)
|
|||||||
static void *miner_thread(void *userdata)
|
static void *miner_thread(void *userdata)
|
||||||
{
|
{
|
||||||
struct thr_info *mythr = (struct thr_info *)userdata;
|
struct thr_info *mythr = (struct thr_info *)userdata;
|
||||||
|
int switchn = pool_switch_count;
|
||||||
int thr_id = mythr->id;
|
int thr_id = mythr->id;
|
||||||
struct work work;
|
struct work work;
|
||||||
uint32_t max_nonce;
|
uint32_t max_nonce;
|
||||||
@ -1581,8 +1578,13 @@ static void *miner_thread(void *userdata)
|
|||||||
/* obtain new work from internal workio thread */
|
/* obtain new work from internal workio thread */
|
||||||
if (unlikely(!get_work(mythr, &g_work))) {
|
if (unlikely(!get_work(mythr, &g_work))) {
|
||||||
pthread_mutex_unlock(&g_work_lock);
|
pthread_mutex_unlock(&g_work_lock);
|
||||||
applog(LOG_ERR, "work retrieval failed, exiting mining thread %d", mythr->id);
|
if (switchn != pool_switch_count) {
|
||||||
goto out;
|
switchn = pool_switch_count;
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
applog(LOG_ERR, "work retrieval failed, exiting mining thread %d", mythr->id);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
g_work_time = time(NULL);
|
g_work_time = time(NULL);
|
||||||
}
|
}
|
||||||
@ -2435,7 +2437,7 @@ bool pool_switch(int pooln)
|
|||||||
prev->allow_gbt = allow_gbt;
|
prev->allow_gbt = allow_gbt;
|
||||||
prev->check_dups = check_dups;
|
prev->check_dups = check_dups;
|
||||||
|
|
||||||
pthread_mutex_lock(&g_work_lock);
|
pthread_mutex_lock(&stratum_work_lock);
|
||||||
|
|
||||||
free(rpc_user); rpc_user = strdup(p->user);
|
free(rpc_user); rpc_user = strdup(p->user);
|
||||||
free(rpc_pass); rpc_pass = strdup(p->pass);
|
free(rpc_pass); rpc_pass = strdup(p->pass);
|
||||||
@ -2454,7 +2456,7 @@ bool pool_switch(int pooln)
|
|||||||
|
|
||||||
want_stratum = have_stratum = (p->type & POOL_STRATUM) != 0;
|
want_stratum = have_stratum = (p->type & POOL_STRATUM) != 0;
|
||||||
|
|
||||||
pthread_mutex_unlock(&g_work_lock);
|
pthread_mutex_unlock(&stratum_work_lock);
|
||||||
|
|
||||||
if (prevn != cur_pooln) {
|
if (prevn != cur_pooln) {
|
||||||
|
|
||||||
@ -2490,11 +2492,11 @@ bool pool_switch(int pooln)
|
|||||||
// will unlock the longpoll thread on /LP url receive
|
// will unlock the longpoll thread on /LP url receive
|
||||||
want_longpoll = (p->type & POOL_LONGPOLL) || !(p->type & POOL_STRATUM);
|
want_longpoll = (p->type & POOL_LONGPOLL) || !(p->type & POOL_STRATUM);
|
||||||
if (want_longpoll) {
|
if (want_longpoll) {
|
||||||
pthread_mutex_lock(&g_work_lock);
|
pthread_mutex_lock(&stratum_work_lock);
|
||||||
// will issue a lp_url request to unlock the longpoll thread
|
// will issue a lp_url request to unlock the longpoll thread
|
||||||
have_longpoll = false;
|
have_longpoll = false;
|
||||||
get_work(&thr_info[0], &g_work);
|
get_work(&thr_info[0], &g_work);
|
||||||
pthread_mutex_unlock(&g_work_lock);
|
pthread_mutex_unlock(&stratum_work_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user