mirror of
https://github.com/GOSTSec/sgminer
synced 2025-09-03 09:42:17 +00:00
Merge branch 'v5_0' of https://github.com/sgminer-dev/sgminer into v5_0
This commit is contained in:
commit
1f73ae040e
@ -3,7 +3,7 @@
|
|||||||
## Core
|
## Core
|
||||||
|
|
||||||
* Multiple algorithms and switching: Jan Berdajs <mrbrdo at mrbrdo dot net> 15bULC8snaKAMeFb3xBmmhbWj1xyTmBUfm
|
* Multiple algorithms and switching: Jan Berdajs <mrbrdo at mrbrdo dot net> 15bULC8snaKAMeFb3xBmmhbWj1xyTmBUfm
|
||||||
* Scrypt-only refactor: Noel Maersk <veox at wemakethings dot net> LfxRFgXzA13TSTxgFGUFEtumv5ShGzAmLw
|
* Historical scrypt-only refactor: Noel Maersk <veox at wemakethings dot net> 12jF1VExtmmMu8D36vo4Y4CYqLK5yCtLC4
|
||||||
* Core: Martin Danielsen <kalroth {at} gmail _dot_ com> 1DNBcSEENBwDKrcTyTW61ezWhzsPy5imkn
|
* Core: Martin Danielsen <kalroth {at} gmail _dot_ com> 1DNBcSEENBwDKrcTyTW61ezWhzsPy5imkn
|
||||||
* Core: Con Kolivas <kernel [at] kolivas {dot} org> 15qSxP1SQcUX3o4nhkfdbgyoWEFMomJ4rZ
|
* Core: Con Kolivas <kernel [at] kolivas {dot} org> 15qSxP1SQcUX3o4nhkfdbgyoWEFMomJ4rZ
|
||||||
* Core: Luke Dashjr <luke-jr+cgminer @at@ utopios .dot. org> 1QATWksNFGeUJCWBrN4g6hGM178Lovm7Wh
|
* Core: Luke Dashjr <luke-jr+cgminer @at@ utopios .dot. org> 1QATWksNFGeUJCWBrN4g6hGM178Lovm7Wh
|
||||||
@ -33,7 +33,6 @@ updated by many others.
|
|||||||
|
|
||||||
## Testing, bug fixes, improvements
|
## Testing, bug fixes, improvements
|
||||||
|
|
||||||
* Hot-switching OpenCL kernel (N-Factor): Jan Berdajs <mrbrdo>
|
|
||||||
* Michael Fiano <mfiano>
|
* Michael Fiano <mfiano>
|
||||||
* Gabriel Devenyi <gdevenyi>
|
* Gabriel Devenyi <gdevenyi>
|
||||||
* Benjamin Herrenschmidt <ozbenh>
|
* Benjamin Herrenschmidt <ozbenh>
|
||||||
|
27
sgminer.c
27
sgminer.c
@ -1,4 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright 2013-2014 sgminer developers (see AUTHORS.md)
|
||||||
* Copyright 2011-2013 Con Kolivas
|
* Copyright 2011-2013 Con Kolivas
|
||||||
* Copyright 2011-2012 Luke Dashjr
|
* Copyright 2011-2012 Luke Dashjr
|
||||||
* Copyright 2010 Jeff Garzik
|
* Copyright 2010 Jeff Garzik
|
||||||
@ -756,8 +757,7 @@ static void setup_url(struct pool *pool, char *arg)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
opt_set_charp(arg, &pool->rpc_url);
|
opt_set_charp(arg, &pool->rpc_url);
|
||||||
if (strncmp(arg, "http://", 7) &&
|
if (strncmp(arg, "http://", 7) && strncmp(arg, "https://", 8)) {
|
||||||
strncmp(arg, "https://", 8)) {
|
|
||||||
char *httpinput;
|
char *httpinput;
|
||||||
|
|
||||||
httpinput = (char *)malloc(255);
|
httpinput = (char *)malloc(255);
|
||||||
@ -7412,6 +7412,8 @@ static void *watchdog_thread(void __maybe_unused *userdata)
|
|||||||
|
|
||||||
hashmeter(-1, &zero_tv, 0);
|
hashmeter(-1, &zero_tv, 0);
|
||||||
|
|
||||||
|
rd_lock(&mining_thr_lock);
|
||||||
|
|
||||||
#ifdef HAVE_CURSES
|
#ifdef HAVE_CURSES
|
||||||
if (curses_active_locked()) {
|
if (curses_active_locked()) {
|
||||||
struct cgpu_info *cgpu;
|
struct cgpu_info *cgpu;
|
||||||
@ -7547,6 +7549,7 @@ static void *watchdog_thread(void __maybe_unused *userdata)
|
|||||||
reinit_device(cgpu);
|
reinit_device(cgpu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
rd_unlock(&mining_thr_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -8122,6 +8125,10 @@ static void restart_mining_threads(unsigned int new_n_threads)
|
|||||||
thr->cgpu->drv->thread_shutdown(thr);
|
thr->cgpu->drv->thread_shutdown(thr);
|
||||||
thr->cgpu->shutdown = false;
|
thr->cgpu->shutdown = false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rd_lock(&mining_thr_lock);
|
||||||
|
if (mining_thr) {
|
||||||
for (i = 0; i < total_devices; ++i) {
|
for (i = 0; i < total_devices; ++i) {
|
||||||
free(devices[i]->thr);
|
free(devices[i]->thr);
|
||||||
}
|
}
|
||||||
@ -8159,14 +8166,26 @@ static void restart_mining_threads(unsigned int new_n_threads)
|
|||||||
thr->cgpu = cgpu;
|
thr->cgpu = cgpu;
|
||||||
thr->device_thread = j;
|
thr->device_thread = j;
|
||||||
|
|
||||||
|
cgtime(&thr->last);
|
||||||
|
|
||||||
|
cgpu->thr[j] = thr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rd_unlock(&mining_thr_lock);
|
||||||
|
|
||||||
|
for (i = 0; i < total_devices; ++i) {
|
||||||
|
struct cgpu_info *cgpu = devices[i];
|
||||||
|
|
||||||
|
for (j = 0; j < cgpu->threads; ++j) {
|
||||||
|
thr = cgpu->thr[j];
|
||||||
|
|
||||||
if (!cgpu->drv->thread_prepare(thr))
|
if (!cgpu->drv->thread_prepare(thr))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (unlikely(thr_info_create(thr, NULL, miner_thread, thr)))
|
if (unlikely(thr_info_create(thr, NULL, miner_thread, thr)))
|
||||||
quit(1, "thread %d create failed", thr->id);
|
quit(1, "thread %d create failed", thr->id);
|
||||||
|
|
||||||
cgpu->thr[j] = thr;
|
|
||||||
|
|
||||||
/* Enable threads for devices set not to mine but disable
|
/* Enable threads for devices set not to mine but disable
|
||||||
* their queue in case we wish to enable them later */
|
* their queue in case we wish to enable them later */
|
||||||
if (cgpu->deven != DEV_DISABLED) {
|
if (cgpu->deven != DEV_DISABLED) {
|
||||||
|
33
util.c
33
util.c
@ -1219,6 +1219,13 @@ bool extract_sockaddr(char *url, char **sockaddr_url, char **sockaddr_port)
|
|||||||
|
|
||||||
if (url_len < 1)
|
if (url_len < 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (url_len >= sizeof(url_address))
|
||||||
|
{
|
||||||
|
applog(LOG_WARNING, "%s: Truncating overflowed address '%.*s'",
|
||||||
|
__func__, url_len, url_begin);
|
||||||
|
url_len = sizeof(url_address) - 1;
|
||||||
|
}
|
||||||
|
|
||||||
sprintf(url_address, "%.*s", url_len, url_begin);
|
sprintf(url_address, "%.*s", url_len, url_begin);
|
||||||
|
|
||||||
@ -1593,17 +1600,23 @@ static bool parse_notify(struct pool *pool, json_t *val)
|
|||||||
pool->swork.nbit,
|
pool->swork.nbit,
|
||||||
"00000000", /* nonce */
|
"00000000", /* nonce */
|
||||||
workpadding);
|
workpadding);
|
||||||
if (unlikely(!hex2bin(pool->header_bin, header, 128)))
|
if (unlikely(!hex2bin(pool->header_bin, header, 128))) {
|
||||||
quit(1, "Failed to convert header to header_bin in parse_notify");
|
applog(LOG_WARNING, "%s: Failed to convert header to header_bin, got %s", __func__, header);
|
||||||
|
pool_failed(pool);
|
||||||
|
// TODO: memory leaks? goto out, clean up there?
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
cb1 = (unsigned char *)calloc(cb1_len, 1);
|
cb1 = (unsigned char *)calloc(cb1_len, 1);
|
||||||
if (unlikely(!cb1))
|
if (unlikely(!cb1))
|
||||||
quithere(1, "Failed to calloc cb1 in parse_notify");
|
quithere(1, "Failed to calloc cb1 in parse_notify");
|
||||||
hex2bin(cb1, coinbase1, cb1_len);
|
hex2bin(cb1, coinbase1, cb1_len);
|
||||||
|
|
||||||
cb2 = (unsigned char *)calloc(cb2_len, 1);
|
cb2 = (unsigned char *)calloc(cb2_len, 1);
|
||||||
if (unlikely(!cb2))
|
if (unlikely(!cb2))
|
||||||
quithere(1, "Failed to calloc cb2 in parse_notify");
|
quithere(1, "Failed to calloc cb2 in parse_notify");
|
||||||
hex2bin(cb2, coinbase2, cb2_len);
|
hex2bin(cb2, coinbase2, cb2_len);
|
||||||
|
|
||||||
free(pool->coinbase);
|
free(pool->coinbase);
|
||||||
align_len(&alloc_len);
|
align_len(&alloc_len);
|
||||||
pool->coinbase = (unsigned char *)calloc(alloc_len, 1);
|
pool->coinbase = (unsigned char *)calloc(alloc_len, 1);
|
||||||
@ -1611,6 +1624,7 @@ static bool parse_notify(struct pool *pool, json_t *val)
|
|||||||
quit(1, "Failed to calloc pool coinbase in parse_notify");
|
quit(1, "Failed to calloc pool coinbase in parse_notify");
|
||||||
memcpy(pool->coinbase, cb1, cb1_len);
|
memcpy(pool->coinbase, cb1, cb1_len);
|
||||||
memcpy(pool->coinbase + cb1_len, pool->nonce1bin, pool->n1_len);
|
memcpy(pool->coinbase + cb1_len, pool->nonce1bin, pool->n1_len);
|
||||||
|
// NOTE: gap for nonce2, filled at work generation time
|
||||||
memcpy(pool->coinbase + cb1_len + pool->n1_len + pool->n2size, cb2, cb2_len);
|
memcpy(pool->coinbase + cb1_len + pool->n1_len + pool->n2size, cb2, cb2_len);
|
||||||
cg_wunlock(&pool->data_lock);
|
cg_wunlock(&pool->data_lock);
|
||||||
|
|
||||||
@ -1711,15 +1725,14 @@ static void __suspend_stratum(struct pool *pool)
|
|||||||
|
|
||||||
static bool parse_reconnect(struct pool *pool, json_t *val)
|
static bool parse_reconnect(struct pool *pool, json_t *val)
|
||||||
{
|
{
|
||||||
char *sockaddr_url, *stratum_port, *tmp;
|
|
||||||
char *url, *port, address[256];
|
|
||||||
|
|
||||||
if (opt_disable_client_reconnect) {
|
if (opt_disable_client_reconnect) {
|
||||||
applog(LOG_WARNING, "Stratum client.reconnect forbidden, aborting.");
|
applog(LOG_WARNING, "Stratum client.reconnect received but is disabled, not reconnecting.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(address, 0, 255);
|
char *url, *port, address[256];
|
||||||
|
char *sockaddr_url, *stratum_port, *tmp; /* Tempvars. */
|
||||||
|
|
||||||
url = (char *)json_string_value(json_array_get(val, 0));
|
url = (char *)json_string_value(json_array_get(val, 0));
|
||||||
if (!url)
|
if (!url)
|
||||||
url = pool->sockaddr_url;
|
url = pool->sockaddr_url;
|
||||||
@ -1728,8 +1741,7 @@ static bool parse_reconnect(struct pool *pool, json_t *val)
|
|||||||
if (!port)
|
if (!port)
|
||||||
port = pool->stratum_port;
|
port = pool->stratum_port;
|
||||||
|
|
||||||
sprintf(address, "%s:%s", url, port);
|
snprintf(address, sizeof(address), "%s:%s", url, port);
|
||||||
|
|
||||||
if (!extract_sockaddr(address, &sockaddr_url, &stratum_port))
|
if (!extract_sockaddr(address, &sockaddr_url, &stratum_port))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -2505,7 +2517,8 @@ resend:
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
n2size = json_integer_value(json_array_get(res_val, 2));
|
n2size = json_integer_value(json_array_get(res_val, 2));
|
||||||
if (!n2size) {
|
if (n2size < 1)
|
||||||
|
{
|
||||||
applog(LOG_INFO, "Failed to get n2size in initiate_stratum");
|
applog(LOG_INFO, "Failed to get n2size in initiate_stratum");
|
||||||
free(sessionid);
|
free(sessionid);
|
||||||
free(nonce1);
|
free(nonce1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user