|
|
@ -214,6 +214,8 @@ struct worker_instance { |
|
|
|
|
|
|
|
|
|
|
|
typedef struct stratifier_data sdata_t; |
|
|
|
typedef struct stratifier_data sdata_t; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct proxy_base proxy_t; |
|
|
|
|
|
|
|
|
|
|
|
/* Per client stratum instance == workers */ |
|
|
|
/* Per client stratum instance == workers */ |
|
|
|
struct stratum_instance { |
|
|
|
struct stratum_instance { |
|
|
|
UT_hash_handle hh; |
|
|
|
UT_hash_handle hh; |
|
|
@ -276,7 +278,8 @@ struct stratum_instance { |
|
|
|
double best_diff; /* Best share found by this instance */ |
|
|
|
double best_diff; /* Best share found by this instance */ |
|
|
|
|
|
|
|
|
|
|
|
sdata_t *sdata; /* Which sdata this client is bound to */ |
|
|
|
sdata_t *sdata; /* Which sdata this client is bound to */ |
|
|
|
int proxyid; /* Which proxy this is bound to in proxy mode */ |
|
|
|
proxy_t *proxy; /* Proxy this is bound to in proxy mode */ |
|
|
|
|
|
|
|
int proxyid; /* Which proxy id */ |
|
|
|
int subproxyid; /* Which subproxy */ |
|
|
|
int subproxyid; /* Which subproxy */ |
|
|
|
int64_t notify_id; /* Which notify_id from the subproxy did we join */ |
|
|
|
int64_t notify_id; /* Which notify_id from the subproxy did we join */ |
|
|
|
}; |
|
|
|
}; |
|
|
@ -297,8 +300,6 @@ typedef union { |
|
|
|
uint8_t u8; |
|
|
|
uint8_t u8; |
|
|
|
} enonce1_t; |
|
|
|
} enonce1_t; |
|
|
|
|
|
|
|
|
|
|
|
typedef struct proxy_base proxy_t; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct proxy_base { |
|
|
|
struct proxy_base { |
|
|
|
UT_hash_handle hh; |
|
|
|
UT_hash_handle hh; |
|
|
|
UT_hash_handle sh; /* For subproxy hashlist */ |
|
|
|
UT_hash_handle sh; /* For subproxy hashlist */ |
|
|
@ -321,6 +322,7 @@ struct proxy_base { |
|
|
|
|
|
|
|
|
|
|
|
int64_t clients; |
|
|
|
int64_t clients; |
|
|
|
int64_t max_clients; |
|
|
|
int64_t max_clients; |
|
|
|
|
|
|
|
int64_t bound_clients; |
|
|
|
int64_t headroom; |
|
|
|
int64_t headroom; |
|
|
|
enonce1_t enonce1u; |
|
|
|
enonce1_t enonce1u; |
|
|
|
|
|
|
|
|
|
|
@ -948,6 +950,8 @@ static void update_base(ckpool_t *ckp, const int prio) |
|
|
|
|
|
|
|
|
|
|
|
static void __kill_instance(stratum_instance_t *client) |
|
|
|
static void __kill_instance(stratum_instance_t *client) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
if (client->proxy) |
|
|
|
|
|
|
|
client->proxy->bound_clients--; |
|
|
|
free(client->workername); |
|
|
|
free(client->workername); |
|
|
|
free(client->useragent); |
|
|
|
free(client->useragent); |
|
|
|
free(client); |
|
|
|
free(client); |
|
|
@ -2341,8 +2345,11 @@ static bool new_enonce1(ckpool_t *ckp, sdata_t *ckp_sdata, sdata_t *sdata, strat |
|
|
|
quit(0, "Invalid enonce1varlen %d", enonce1varlen); |
|
|
|
quit(0, "Invalid enonce1varlen %d", enonce1varlen); |
|
|
|
} |
|
|
|
} |
|
|
|
if (ret) { |
|
|
|
if (ret) { |
|
|
|
if (proxy) |
|
|
|
if (proxy) { |
|
|
|
|
|
|
|
client->proxy = proxy; |
|
|
|
proxy->clients++; |
|
|
|
proxy->clients++; |
|
|
|
|
|
|
|
proxy->bound_clients++; |
|
|
|
|
|
|
|
} |
|
|
|
client->enonce1_64 = enonce1u->u64; |
|
|
|
client->enonce1_64 = enonce1u->u64; |
|
|
|
} |
|
|
|
} |
|
|
|
ck_wunlock(&ckp_sdata->instance_lock); |
|
|
|
ck_wunlock(&ckp_sdata->instance_lock); |
|
|
|