Propagate the upstream pool's diff to clients as soon as it has dropped if it's below their current setting
This commit is contained in:
parent
00364f6d28
commit
14a8430265
@ -541,10 +541,13 @@ static void update_notify(ckpool_t *ckp)
|
||||
stratum_broadcast_update(new_block | clean);
|
||||
}
|
||||
|
||||
static void stratum_send_diff(stratum_instance_t *client);
|
||||
|
||||
static void update_diff(ckpool_t *ckp)
|
||||
{
|
||||
stratum_instance_t *client;
|
||||
double old_diff, diff;
|
||||
json_t *val;
|
||||
double diff;
|
||||
char *buf;
|
||||
|
||||
buf = send_recv_proc(ckp->generator, "getdiff");
|
||||
@ -560,8 +563,23 @@ static void update_diff(ckpool_t *ckp)
|
||||
json_decref(val);
|
||||
|
||||
ck_wlock(&workbase_lock);
|
||||
old_diff = proxy_base.diff;
|
||||
current_workbase->diff = proxy_base.diff = diff;
|
||||
ck_wunlock(&workbase_lock);
|
||||
|
||||
if (old_diff < diff)
|
||||
return;
|
||||
|
||||
/* If the diff has dropped, iterated over all the clients and check
|
||||
* they're at or below the new diff, and update it if not. */
|
||||
ck_rlock(&instance_lock);
|
||||
for (client = stratum_instances; client != NULL; client = client->hh.next) {
|
||||
if (client->diff > diff) {
|
||||
client->diff = diff;
|
||||
stratum_send_diff(client);
|
||||
}
|
||||
}
|
||||
ck_runlock(&instance_lock);
|
||||
}
|
||||
|
||||
/* Enter with instance_lock held */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user