Browse Source

Avoid duplicating updates on block change from polling and notified update

master
Con Kolivas 10 years ago
parent
commit
1ff6f77162
  1. 18
      src/stratifier.c

18
src/stratifier.c

@ -159,7 +159,7 @@ static struct {
static int64_t workbase_id; static int64_t workbase_id;
static int64_t blockchange_id; static int64_t blockchange_id;
static char lasthash[68]; static char lasthash[68], lastswaphash[68];
struct json_params { struct json_params {
json_t *params; json_t *params;
@ -556,10 +556,14 @@ static void add_base(ckpool_t *ckp, workbase_t *wb, bool *new_block)
ck_wlock(&workbase_lock); ck_wlock(&workbase_lock);
wb->id = workbase_id++; wb->id = workbase_id++;
if (strncmp(wb->prevhash, lasthash, 64)) { if (strncmp(wb->prevhash, lasthash, 64)) {
char bin[32], swap[32];
*new_block = true; *new_block = true;
memcpy(lasthash, wb->prevhash, 65); memcpy(lasthash, wb->prevhash, 65);
hex2bin(bin, lasthash, 32);
swap_256(swap, bin);
__bin2hex(lastswaphash, swap, 32);
blockchange_id = wb->id; blockchange_id = wb->id;
} }
if (*new_block && ckp->logshares) { if (*new_block && ckp->logshares) {
@ -1193,7 +1197,7 @@ out:
static void *blockupdate(void *arg) static void *blockupdate(void *arg)
{ {
ckpool_t *ckp = (ckpool_t *)arg; ckpool_t *ckp = (ckpool_t *)arg;
char *buf = NULL, hash[68]; char *buf = NULL;
char request[8]; char request[8];
pthread_detach(pthread_self()); pthread_detach(pthread_self());
@ -1204,14 +1208,12 @@ static void *blockupdate(void *arg)
else else
sprintf(request, "getlast"); sprintf(request, "getlast");
memset(hash, 0, 68);
while (42) { while (42) {
dealloc(buf); dealloc(buf);
buf = send_recv_generator(ckp, request, GEN_LAX); buf = send_recv_generator(ckp, request, GEN_LAX);
if (buf && strcmp(buf, hash) && !cmdmatch(buf, "failed")) { if (buf && strcmp(buf, lastswaphash) && !cmdmatch(buf, "failed")) {
strcpy(hash, buf); LOGNOTICE("Block hash changed to %s", buf);
LOGNOTICE("Block hash changed to %s", hash); update_base(ckp, GEN_PRIORITY);
send_proc(ckp->stratifier, "update");
} else } else
cksleep_ms(ckp->blockpoll); cksleep_ms(ckp->blockpoll);
} }

Loading…
Cancel
Save