Browse Source

some cleanup and longpoll changes

master
Tanguy Pruvot 10 years ago
parent
commit
5988e945ef
  1. 24
      ccminer.cpp
  2. 1
      miner.h
  3. 2
      util.cpp
  4. 2
      x15/cuda_whirlpoolx.cu

24
ccminer.cpp

@ -360,9 +360,9 @@ static struct option const options[] = {
{ 0, 0, 0, 0 } { 0, 0, 0, 0 }
}; };
static struct work _ALIGN(64) g_work; struct work _ALIGN(64) g_work;
static time_t g_work_time; time_t g_work_time;
static pthread_mutex_t g_work_lock; pthread_mutex_t g_work_lock;
#ifdef __linux /* Linux specific policy and affinity management */ #ifdef __linux /* Linux specific policy and affinity management */
@ -597,7 +597,7 @@ static bool submit_upstream_work(CURL *curl, struct work *work)
if (get_blocktemplate(curl, &wheight)) { if (get_blocktemplate(curl, &wheight)) {
if (work->height && work->height < wheight.height) { if (work->height && work->height < wheight.height) {
if (opt_debug) if (opt_debug)
applog(LOG_WARNING, "bloc %u was already solved", work->height, wheight.height); applog(LOG_WARNING, "bloc %u was already solved", work->height);
return true; return true;
} }
} }
@ -631,9 +631,8 @@ static bool submit_upstream_work(CURL *curl, struct work *work)
} }
free(noncestr); free(noncestr);
// prevent useless computing on some pools // prevent useless computing on some pools
stratum_need_reset = true; g_work_time = 0;
for (int i = 0; i < opt_n_threads; i++) restart_threads();
work_restart[i].restart = 1;
return true; return true;
} }
@ -1148,7 +1147,7 @@ static void stratum_gen_work(struct stratum_ctx *sctx, struct work *work)
} }
} }
static void restart_threads(void) void restart_threads(void)
{ {
if (opt_debug && !opt_quiet) if (opt_debug && !opt_quiet)
applog(LOG_DEBUG,"%s", __FUNCTION__); applog(LOG_DEBUG,"%s", __FUNCTION__);
@ -1595,7 +1594,7 @@ static void *miner_thread(void *userdata)
// prevent stale work in solo // prevent stale work in solo
// we can't submit twice a block! // we can't submit twice a block!
if (!have_stratum) { if (!have_stratum && !have_longpoll) {
pthread_mutex_lock(&g_work_lock); pthread_mutex_lock(&g_work_lock);
// will force getwork // will force getwork
g_work_time = 0; g_work_time = 0;
@ -1658,7 +1657,7 @@ start:
sprintf(lp_url, "%s%s%s", rpc_url, need_slash ? "/" : "", copy_start); sprintf(lp_url, "%s%s%s", rpc_url, need_slash ? "/" : "", copy_start);
} }
applog(LOG_INFO, "Long-polling activated for %s", lp_url); applog(LOG_INFO, "Long-polling enabled on %s", lp_url);
while (1) { while (1) {
json_t *val, *soval; json_t *val, *soval;
@ -1672,13 +1671,12 @@ start:
goto out; goto out;
} }
if (likely(val)) { if (likely(val)) {
if (!opt_quiet) applog(LOG_INFO, "LONGPOLL detected new block");
soval = json_object_get(json_object_get(val, "result"), "submitold"); soval = json_object_get(json_object_get(val, "result"), "submitold");
submit_old = soval ? json_is_true(soval) : false; submit_old = soval ? json_is_true(soval) : false;
pthread_mutex_lock(&g_work_lock); pthread_mutex_lock(&g_work_lock);
if (work_decode(json_object_get(val, "result"), &g_work)) { if (work_decode(json_object_get(val, "result"), &g_work)) {
if (opt_debug) if (!opt_quiet)
applog(LOG_BLUE, "LONGPOLL pushed new work"); applog(LOG_BLUE, "%s detected new block", short_url);
g_work_time = time(NULL); g_work_time = time(NULL);
restart_threads(); restart_threads();
} }

1
miner.h

@ -645,6 +645,7 @@ extern void tq_thaw(struct thread_q *tq);
void parse_arg(int key, char *arg); void parse_arg(int key, char *arg);
void proper_exit(int reason); void proper_exit(int reason);
void restart_threads(void);
size_t time2str(char* buf, time_t timer); size_t time2str(char* buf, time_t timer);
char* atime2str(time_t timer); char* atime2str(time_t timer);

2
util.cpp

@ -1344,6 +1344,7 @@ out:
return ret; return ret;
} }
extern time_t g_work_time;
static bool stratum_set_difficulty(struct stratum_ctx *sctx, json_t *params) static bool stratum_set_difficulty(struct stratum_ctx *sctx, json_t *params)
{ {
double diff; double diff;
@ -1360,6 +1361,7 @@ static bool stratum_set_difficulty(struct stratum_ctx *sctx, json_t *params)
if (diff != global_diff) { if (diff != global_diff) {
global_diff = diff; global_diff = diff;
applog(LOG_WARNING, "Stratum difficulty set to %g", diff); applog(LOG_WARNING, "Stratum difficulty set to %g", diff);
g_work_time = 0;
} }
return true; return true;

2
x15/cuda_whirlpoolx.cu

@ -181,7 +181,7 @@ void whirlpoolx_gpu_precompute(uint32_t threads, uint64_t* d_xtra, uint64_t* d_t
if (thread < threads) if (thread < threads)
{ {
uint64_t n[8]; uint64_t n[8];
uint64_t h[8] = {0,0,0,0,0,0,0,0}; uint64_t h[8] = { 0 };
#pragma unroll 8 #pragma unroll 8
for (int i=0; i<8; i++) { for (int i=0; i<8; i++) {

Loading…
Cancel
Save