|
|
@ -1986,7 +1986,7 @@ void log_curses(int prio, const char *f, va_list ap) |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
if (curses_active_locked()) { |
|
|
|
if (curses_active_locked()) { |
|
|
|
if (!opt_loginput) { |
|
|
|
if (!opt_loginput || prio == LOG_ERR || prio == LOG_WARNING) { |
|
|
|
vw_printw(logwin, f, ap); |
|
|
|
vw_printw(logwin, f, ap); |
|
|
|
wrefresh(logwin); |
|
|
|
wrefresh(logwin); |
|
|
|
} |
|
|
|
} |
|
|
@ -1995,7 +1995,7 @@ void log_curses(int prio, const char *f, va_list ap) |
|
|
|
vprintf(f, ap); |
|
|
|
vprintf(f, ap); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void clear_logwin(void) |
|
|
|
void clear_logwin(void) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (curses_active_locked()) { |
|
|
|
if (curses_active_locked()) { |
|
|
|
wclear(logwin); |
|
|
|
wclear(logwin); |
|
|
@ -2065,10 +2065,10 @@ static bool submit_upstream_work(const struct work *work) |
|
|
|
applog(LOG_DEBUG, "PROOF OF WORK RESULT: true (yay!!!)"); |
|
|
|
applog(LOG_DEBUG, "PROOF OF WORK RESULT: true (yay!!!)"); |
|
|
|
if (!QUIET) { |
|
|
|
if (!QUIET) { |
|
|
|
if (total_pools > 1) |
|
|
|
if (total_pools > 1) |
|
|
|
applog(LOG_WARNING, "Accepted %.8s %sPU %d thread %d pool %d", |
|
|
|
applog(LOG_NOTICE, "Accepted %.8s %sPU %d thread %d pool %d", |
|
|
|
hexstr + 152, cgpu->is_gpu? "G" : "C", cgpu->cpu_gpu, thr_id, work->pool->pool_no); |
|
|
|
hexstr + 152, cgpu->is_gpu? "G" : "C", cgpu->cpu_gpu, thr_id, work->pool->pool_no); |
|
|
|
else |
|
|
|
else |
|
|
|
applog(LOG_WARNING, "Accepted %.8s %sPU %d thread %d", |
|
|
|
applog(LOG_NOTICE, "Accepted %.8s %sPU %d thread %d", |
|
|
|
hexstr + 152, cgpu->is_gpu? "G" : "C", cgpu->cpu_gpu, thr_id); |
|
|
|
hexstr + 152, cgpu->is_gpu? "G" : "C", cgpu->cpu_gpu, thr_id); |
|
|
|
} |
|
|
|
} |
|
|
|
if (opt_shares && total_accepted >= opt_shares) { |
|
|
|
if (opt_shares && total_accepted >= opt_shares) { |
|
|
@ -2084,10 +2084,10 @@ static bool submit_upstream_work(const struct work *work) |
|
|
|
applog(LOG_DEBUG, "PROOF OF WORK RESULT: false (booooo)"); |
|
|
|
applog(LOG_DEBUG, "PROOF OF WORK RESULT: false (booooo)"); |
|
|
|
if (!QUIET) { |
|
|
|
if (!QUIET) { |
|
|
|
if (total_pools > 1) |
|
|
|
if (total_pools > 1) |
|
|
|
applog(LOG_WARNING, "Rejected %.8s %sPU %d thread %d pool %d", |
|
|
|
applog(LOG_NOTICE, "Rejected %.8s %sPU %d thread %d pool %d", |
|
|
|
hexstr + 152, cgpu->is_gpu? "G" : "C", cgpu->cpu_gpu, thr_id, work->pool->pool_no); |
|
|
|
hexstr + 152, cgpu->is_gpu? "G" : "C", cgpu->cpu_gpu, thr_id, work->pool->pool_no); |
|
|
|
else |
|
|
|
else |
|
|
|
applog(LOG_WARNING, "Rejected %.8s %sPU %d thread %d", |
|
|
|
applog(LOG_NOTICE, "Rejected %.8s %sPU %d thread %d", |
|
|
|
hexstr + 152, cgpu->is_gpu? "G" : "C", cgpu->cpu_gpu, thr_id); |
|
|
|
hexstr + 152, cgpu->is_gpu? "G" : "C", cgpu->cpu_gpu, thr_id); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -2390,7 +2390,7 @@ static void *submit_work_thread(void *userdata) |
|
|
|
pthread_detach(pthread_self()); |
|
|
|
pthread_detach(pthread_self()); |
|
|
|
|
|
|
|
|
|
|
|
if (!opt_submit_stale && stale_work(work)) { |
|
|
|
if (!opt_submit_stale && stale_work(work)) { |
|
|
|
applog(LOG_WARNING, "Stale share detected, discarding"); |
|
|
|
applog(LOG_NOTICE, "Stale share detected, discarding"); |
|
|
|
total_stale++; |
|
|
|
total_stale++; |
|
|
|
pool->stale_shares++; |
|
|
|
pool->stale_shares++; |
|
|
|
goto out; |
|
|
|
goto out; |
|
|
@ -2399,7 +2399,7 @@ static void *submit_work_thread(void *userdata) |
|
|
|
/* submit solution to bitcoin via JSON-RPC */ |
|
|
|
/* submit solution to bitcoin via JSON-RPC */ |
|
|
|
while (!submit_upstream_work(work)) { |
|
|
|
while (!submit_upstream_work(work)) { |
|
|
|
if (!opt_submit_stale && stale_work(work)) { |
|
|
|
if (!opt_submit_stale && stale_work(work)) { |
|
|
|
applog(LOG_WARNING, "Stale share detected, discarding"); |
|
|
|
applog(LOG_NOTICE, "Stale share detected, discarding"); |
|
|
|
total_stale++; |
|
|
|
total_stale++; |
|
|
|
pool->stale_shares++; |
|
|
|
pool->stale_shares++; |
|
|
|
break; |
|
|
|
break; |
|
|
@ -2656,9 +2656,9 @@ static void test_work_current(struct work *work) |
|
|
|
if (block_changed != BLOCK_LP && block_changed != BLOCK_FIRST) { |
|
|
|
if (block_changed != BLOCK_LP && block_changed != BLOCK_FIRST) { |
|
|
|
block_changed = BLOCK_DETECT; |
|
|
|
block_changed = BLOCK_DETECT; |
|
|
|
if (have_longpoll) |
|
|
|
if (have_longpoll) |
|
|
|
applog(LOG_WARNING, "New block detected on network before longpoll, waiting on fresh work"); |
|
|
|
applog(LOG_NOTICE, "New block detected on network before longpoll, waiting on fresh work"); |
|
|
|
else |
|
|
|
else |
|
|
|
applog(LOG_WARNING, "New block detected on network, waiting on fresh work"); |
|
|
|
applog(LOG_NOTICE, "New block detected on network, waiting on fresh work"); |
|
|
|
} else |
|
|
|
} else |
|
|
|
block_changed = BLOCK_NONE; |
|
|
|
block_changed = BLOCK_NONE; |
|
|
|
restart_threads(); |
|
|
|
restart_threads(); |
|
|
@ -2806,8 +2806,8 @@ static void display_pools(void) |
|
|
|
|
|
|
|
|
|
|
|
opt_loginput = true; |
|
|
|
opt_loginput = true; |
|
|
|
immedok(logwin, true); |
|
|
|
immedok(logwin, true); |
|
|
|
updated: |
|
|
|
|
|
|
|
clear_logwin(); |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
updated: |
|
|
|
for (i = 0; i < total_pools; i++) { |
|
|
|
for (i = 0; i < total_pools; i++) { |
|
|
|
pool = pools[i]; |
|
|
|
pool = pools[i]; |
|
|
|
|
|
|
|
|
|
|
@ -2921,9 +2921,9 @@ retry: |
|
|
|
pool = pools[selected]; |
|
|
|
pool = pools[selected]; |
|
|
|
display_pool_summary(pool); |
|
|
|
display_pool_summary(pool); |
|
|
|
goto retry; |
|
|
|
goto retry; |
|
|
|
} |
|
|
|
} else |
|
|
|
|
|
|
|
|
|
|
|
clear_logwin(); |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
|
|
|
|
immedok(logwin, false); |
|
|
|
immedok(logwin, false); |
|
|
|
opt_loginput = false; |
|
|
|
opt_loginput = false; |
|
|
|
} |
|
|
|
} |
|
|
@ -2935,8 +2935,8 @@ static void display_options(void) |
|
|
|
|
|
|
|
|
|
|
|
opt_loginput = true; |
|
|
|
opt_loginput = true; |
|
|
|
immedok(logwin, true); |
|
|
|
immedok(logwin, true); |
|
|
|
retry: |
|
|
|
|
|
|
|
clear_logwin(); |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
retry: |
|
|
|
wlogprint("[N]ormal [C]lear [S]ilent mode (disable all output)\n"); |
|
|
|
wlogprint("[N]ormal [C]lear [S]ilent mode (disable all output)\n"); |
|
|
|
wlogprint("[D]ebug:%s\n[P]er-device:%s\n[Q]uiet:%s\n[V]erbose:%s\n[R]PC debug:%s\n[L]og interval:%d\n", |
|
|
|
wlogprint("[D]ebug:%s\n[P]er-device:%s\n[Q]uiet:%s\n[V]erbose:%s\n[R]PC debug:%s\n[L]og interval:%d\n", |
|
|
|
opt_debug ? "on" : "off", |
|
|
|
opt_debug ? "on" : "off", |
|
|
@ -2949,40 +2949,40 @@ retry: |
|
|
|
input = getch(); |
|
|
|
input = getch(); |
|
|
|
if (!strncasecmp(&input, "q", 1)) { |
|
|
|
if (!strncasecmp(&input, "q", 1)) { |
|
|
|
opt_quiet ^= true; |
|
|
|
opt_quiet ^= true; |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
wlogprint("Quiet mode %s\n", opt_quiet ? "enabled" : "disabled"); |
|
|
|
wlogprint("Quiet mode %s\n", opt_quiet ? "enabled" : "disabled"); |
|
|
|
|
|
|
|
goto retry; |
|
|
|
} else if (!strncasecmp(&input, "v", 1)) { |
|
|
|
} else if (!strncasecmp(&input, "v", 1)) { |
|
|
|
opt_log_output ^= true; |
|
|
|
opt_log_output ^= true; |
|
|
|
if (opt_log_output) |
|
|
|
if (opt_log_output) |
|
|
|
opt_quiet = false; |
|
|
|
opt_quiet = false; |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
wlogprint("Verbose mode %s\n", opt_log_output ? "enabled" : "disabled"); |
|
|
|
wlogprint("Verbose mode %s\n", opt_log_output ? "enabled" : "disabled"); |
|
|
|
|
|
|
|
goto retry; |
|
|
|
} else if (!strncasecmp(&input, "n", 1)) { |
|
|
|
} else if (!strncasecmp(&input, "n", 1)) { |
|
|
|
opt_log_output = false; |
|
|
|
opt_log_output = false; |
|
|
|
opt_debug = false; |
|
|
|
opt_debug = false; |
|
|
|
opt_quiet = false; |
|
|
|
opt_quiet = false; |
|
|
|
opt_protocol = false; |
|
|
|
opt_protocol = false; |
|
|
|
want_per_device_stats = false; |
|
|
|
want_per_device_stats = false; |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
wlogprint("Output mode reset to normal\n"); |
|
|
|
wlogprint("Output mode reset to normal\n"); |
|
|
|
|
|
|
|
goto retry; |
|
|
|
} else if (!strncasecmp(&input, "d", 1)) { |
|
|
|
} else if (!strncasecmp(&input, "d", 1)) { |
|
|
|
opt_debug ^= true; |
|
|
|
opt_debug ^= true; |
|
|
|
opt_log_output = opt_debug; |
|
|
|
opt_log_output = opt_debug; |
|
|
|
if (opt_debug) |
|
|
|
if (opt_debug) |
|
|
|
opt_quiet = false; |
|
|
|
opt_quiet = false; |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
wlogprint("Debug mode %s\n", opt_debug ? "enabled" : "disabled"); |
|
|
|
wlogprint("Debug mode %s\n", opt_debug ? "enabled" : "disabled"); |
|
|
|
|
|
|
|
goto retry; |
|
|
|
} else if (!strncasecmp(&input, "p", 1)) { |
|
|
|
} else if (!strncasecmp(&input, "p", 1)) { |
|
|
|
want_per_device_stats ^= true; |
|
|
|
want_per_device_stats ^= true; |
|
|
|
opt_log_output = want_per_device_stats; |
|
|
|
opt_log_output = want_per_device_stats; |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
wlogprint("Per-device stats %s\n", want_per_device_stats ? "enabled" : "disabled"); |
|
|
|
wlogprint("Per-device stats %s\n", want_per_device_stats ? "enabled" : "disabled"); |
|
|
|
|
|
|
|
goto retry; |
|
|
|
} else if (!strncasecmp(&input, "r", 1)) { |
|
|
|
} else if (!strncasecmp(&input, "r", 1)) { |
|
|
|
opt_protocol ^= true; |
|
|
|
opt_protocol ^= true; |
|
|
|
if (opt_protocol) |
|
|
|
if (opt_protocol) |
|
|
|
opt_quiet = false; |
|
|
|
opt_quiet = false; |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
wlogprint("RPC protocol debugging %s\n", opt_protocol ? "enabled" : "disabled"); |
|
|
|
wlogprint("RPC protocol debugging %s\n", opt_protocol ? "enabled" : "disabled"); |
|
|
|
|
|
|
|
goto retry; |
|
|
|
} else if (!strncasecmp(&input, "c", 1)) |
|
|
|
} else if (!strncasecmp(&input, "c", 1)) |
|
|
|
clear_logwin(); |
|
|
|
clear_logwin(); |
|
|
|
else if (!strncasecmp(&input, "l", 1)) { |
|
|
|
else if (!strncasecmp(&input, "l", 1)) { |
|
|
@ -2992,12 +2992,12 @@ retry: |
|
|
|
goto retry; |
|
|
|
goto retry; |
|
|
|
} |
|
|
|
} |
|
|
|
opt_log_interval = selected; |
|
|
|
opt_log_interval = selected; |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
wlogprint("Log interval set to %d seconds\n", opt_log_interval); |
|
|
|
wlogprint("Log interval set to %d seconds\n", opt_log_interval); |
|
|
|
|
|
|
|
goto retry; |
|
|
|
} else if (!strncasecmp(&input, "s", 1)) { |
|
|
|
} else if (!strncasecmp(&input, "s", 1)) { |
|
|
|
opt_realquiet = true; |
|
|
|
opt_realquiet = true; |
|
|
|
|
|
|
|
} else |
|
|
|
clear_logwin(); |
|
|
|
clear_logwin(); |
|
|
|
} else clear_logwin(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
immedok(logwin, false); |
|
|
|
immedok(logwin, false); |
|
|
|
opt_loginput = false; |
|
|
|
opt_loginput = false; |
|
|
@ -3010,8 +3010,8 @@ static void set_options(void) |
|
|
|
|
|
|
|
|
|
|
|
opt_loginput = true; |
|
|
|
opt_loginput = true; |
|
|
|
immedok(logwin, true); |
|
|
|
immedok(logwin, true); |
|
|
|
retry: |
|
|
|
|
|
|
|
clear_logwin(); |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
retry: |
|
|
|
wlogprint("\n[D]ynamic mode: %s\n[L]ongpoll: %s\n", |
|
|
|
wlogprint("\n[D]ynamic mode: %s\n[L]ongpoll: %s\n", |
|
|
|
opt_dynamic ? "On" : "Off", want_longpoll ? "On" : "Off"); |
|
|
|
opt_dynamic ? "On" : "Off", want_longpoll ? "On" : "Off"); |
|
|
|
if (opt_dynamic) |
|
|
|
if (opt_dynamic) |
|
|
@ -3072,9 +3072,9 @@ retry: |
|
|
|
} |
|
|
|
} |
|
|
|
opt_fail_pause = selected; |
|
|
|
opt_fail_pause = selected; |
|
|
|
goto retry; |
|
|
|
goto retry; |
|
|
|
} |
|
|
|
} else |
|
|
|
|
|
|
|
|
|
|
|
clear_logwin(); |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
|
|
|
|
immedok(logwin, false); |
|
|
|
immedok(logwin, false); |
|
|
|
opt_loginput = false; |
|
|
|
opt_loginput = false; |
|
|
|
} |
|
|
|
} |
|
|
@ -3221,9 +3221,9 @@ retry: |
|
|
|
goto retry; |
|
|
|
goto retry; |
|
|
|
} |
|
|
|
} |
|
|
|
change_gpusettings(selected); |
|
|
|
change_gpusettings(selected); |
|
|
|
} |
|
|
|
} else |
|
|
|
|
|
|
|
|
|
|
|
clear_logwin(); |
|
|
|
clear_logwin(); |
|
|
|
|
|
|
|
|
|
|
|
immedok(logwin, false); |
|
|
|
immedok(logwin, false); |
|
|
|
opt_loginput = false; |
|
|
|
opt_loginput = false; |
|
|
|
} |
|
|
|
} |
|
|
@ -4367,7 +4367,7 @@ static void *longpoll_thread(void *userdata) |
|
|
|
|
|
|
|
|
|
|
|
tq_pop(mythr->q, NULL); |
|
|
|
tq_pop(mythr->q, NULL); |
|
|
|
if (!pool->hdr_path) { |
|
|
|
if (!pool->hdr_path) { |
|
|
|
applog(LOG_WARNING, "No long-poll found on this server"); |
|
|
|
applog(LOG_NOTICE, "No long-poll found on this server"); |
|
|
|
goto out; |
|
|
|
goto out; |
|
|
|
} |
|
|
|
} |
|
|
|
hdr_path = pool->hdr_path; |
|
|
|
hdr_path = pool->hdr_path; |
|
|
@ -4392,7 +4392,7 @@ static void *longpoll_thread(void *userdata) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
have_longpoll = true; |
|
|
|
have_longpoll = true; |
|
|
|
applog(LOG_WARNING, "Long-polling activated for %s", lp_url); |
|
|
|
applog(LOG_NOTICE, "Long-polling activated for %s", lp_url); |
|
|
|
|
|
|
|
|
|
|
|
while (1) { |
|
|
|
while (1) { |
|
|
|
struct timeval start, end; |
|
|
|
struct timeval start, end; |
|
|
@ -4407,7 +4407,7 @@ static void *longpoll_thread(void *userdata) |
|
|
|
* sure it's only done once per new block */ |
|
|
|
* sure it's only done once per new block */ |
|
|
|
if (block_changed != BLOCK_DETECT) { |
|
|
|
if (block_changed != BLOCK_DETECT) { |
|
|
|
block_changed = BLOCK_LP; |
|
|
|
block_changed = BLOCK_LP; |
|
|
|
applog(LOG_WARNING, "LONGPOLL detected new block on network, waiting on fresh work"); |
|
|
|
applog(LOG_NOTICE, "LONGPOLL detected new block on network, waiting on fresh work"); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
applog(LOG_INFO, "LONGPOLL received after new block already detected"); |
|
|
|
applog(LOG_INFO, "LONGPOLL received after new block already detected"); |
|
|
|
block_changed = BLOCK_NONE; |
|
|
|
block_changed = BLOCK_NONE; |
|
|
@ -4891,7 +4891,7 @@ char *curses_input(const char *query) |
|
|
|
if (!input) |
|
|
|
if (!input) |
|
|
|
quit(1, "Failed to malloc input"); |
|
|
|
quit(1, "Failed to malloc input"); |
|
|
|
leaveok(logwin, false); |
|
|
|
leaveok(logwin, false); |
|
|
|
wlogprint("%s: ", query); |
|
|
|
wlogprint("%s:\n", query); |
|
|
|
wgetnstr(logwin, input, 255); |
|
|
|
wgetnstr(logwin, input, 255); |
|
|
|
if (!strlen(input)) |
|
|
|
if (!strlen(input)) |
|
|
|
strcpy(input, "-1"); |
|
|
|
strcpy(input, "-1"); |
|
|
|