Browse Source

Send the relevant sdata to be used by new_enonce1

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

18
src/stratifier.c

@ -2098,23 +2098,23 @@ static void __fill_enonce1data(const workbase_t *wb, stratum_instance_t *client)
* When the proxy space is less than 32 bits to work with, we look for an * When the proxy space is less than 32 bits to work with, we look for an
* unused enonce1 value and reject clients instead if there is no space left. * unused enonce1 value and reject clients instead if there is no space left.
* Needs to be entered with client holding a ref count. */ * Needs to be entered with client holding a ref count. */
static bool new_enonce1(sdata_t *sdata, stratum_instance_t *client) static bool new_enonce1(ckpool_t *ckp, sdata_t *ckp_sdata, sdata_t *sdata, stratum_instance_t *client)
{ {
proxy_t *proxy = NULL; proxy_t *proxy = NULL;
enonce1_t *enonce1u; enonce1_t *enonce1u;
int enonce1varlen; int enonce1varlen;
bool ret = false; bool ret = false;
if (client->ckp->proxy) { if (ckp->proxy) {
if (!sdata->proxy) if (!ckp_sdata->proxy)
return false; return false;
mutex_lock(&sdata->proxy_lock); mutex_lock(&ckp_sdata->proxy_lock);
proxy = sdata->proxy; proxy = ckp_sdata->proxy;
enonce1u = &proxy->enonce1u; enonce1u = &proxy->enonce1u;
client->proxyid = proxy->id; client->proxyid = proxy->id;
client->subproxyid = proxy->subid; client->subproxyid = proxy->subid;
mutex_unlock(&sdata->proxy_lock); mutex_unlock(&ckp_sdata->proxy_lock);
if (proxy->clients >= proxy->max_clients) { if (proxy->clients >= proxy->max_clients) {
LOGWARNING("Proxy reached max clients %"PRId64, proxy->max_clients); LOGWARNING("Proxy reached max clients %"PRId64, proxy->max_clients);
@ -2132,7 +2132,7 @@ static bool new_enonce1(sdata_t *sdata, stratum_instance_t *client)
/* instance_lock protects enonce1u. Recruiting extra proxies should /* instance_lock protects enonce1u. Recruiting extra proxies should
* prevent these ever locking out.*/ * prevent these ever locking out.*/
ck_wlock(&sdata->instance_lock); ck_wlock(&ckp_sdata->instance_lock);
switch(enonce1varlen) { switch(enonce1varlen) {
case 8: case 8:
enonce1u->u64++; enonce1u->u64++;
@ -2166,7 +2166,7 @@ static bool new_enonce1(sdata_t *sdata, stratum_instance_t *client)
proxy->clients++; proxy->clients++;
client->enonce1_64 = enonce1u->u64; client->enonce1_64 = enonce1u->u64;
} }
ck_wunlock(&sdata->instance_lock); ck_wunlock(&ckp_sdata->instance_lock);
ck_rlock(&sdata->workbase_lock); ck_rlock(&sdata->workbase_lock);
__fill_enonce1data(sdata->current_workbase, client); __fill_enonce1data(sdata->current_workbase, client);
@ -2271,7 +2271,7 @@ static json_t *parse_subscribe(stratum_instance_t *client, const int64_t client_
client->useragent = ckzalloc(1); client->useragent = ckzalloc(1);
if (!old_match) { if (!old_match) {
/* Create a new extranonce1 based on a uint64_t pointer */ /* Create a new extranonce1 based on a uint64_t pointer */
if (!new_enonce1(sdata, client)) { if (!new_enonce1(ckp, ckp_sdata, sdata, client)) {
stratum_send_message(sdata, client, "Pool full of clients"); stratum_send_message(sdata, client, "Pool full of clients");
client->reject = 2; client->reject = 2;
return json_string("proxy full"); return json_string("proxy full");

Loading…
Cancel
Save