Browse Source

Add instance counter to worker data

master
Con Kolivas 9 years ago
parent
commit
cdc7497a28
  1. 17
      src/stratifier.c

17
src/stratifier.c

@ -205,6 +205,9 @@ struct worker_instance {
user_instance_t *user_instance; user_instance_t *user_instance;
char *workername; char *workername;
/* Number of stratum instances attached as this one worker */
int instance_count;
worker_instance_t *next; worker_instance_t *next;
worker_instance_t *prev; worker_instance_t *prev;
@ -1227,18 +1230,20 @@ static void __kill_instance(sdata_t *sdata, stratum_instance_t *client)
/* Called with instance_lock held. Note stats.users is protected by /* Called with instance_lock held. Note stats.users is protected by
* instance lock to avoid recursive locking. */ * instance lock to avoid recursive locking. */
static void __inc_worker(sdata_t *sdata, user_instance_t *instance) static void __inc_worker(sdata_t *sdata, user_instance_t *user, worker_instance_t *worker)
{ {
sdata->stats.workers++; sdata->stats.workers++;
if (!instance->workers++) if (!user->workers++)
sdata->stats.users++; sdata->stats.users++;
worker->instance_count++;
} }
static void __dec_worker(sdata_t *sdata, user_instance_t *instance) static void __dec_worker(sdata_t *sdata, user_instance_t *user, worker_instance_t *worker)
{ {
sdata->stats.workers--; sdata->stats.workers--;
if (!--instance->workers) if (!--user->workers)
sdata->stats.users--; sdata->stats.users--;
worker->instance_count--;
} }
static void __disconnect_session(sdata_t *sdata, const stratum_instance_t *client) static void __disconnect_session(sdata_t *sdata, const stratum_instance_t *client)
@ -1281,7 +1286,7 @@ static void __del_client(sdata_t *sdata, stratum_instance_t *client)
HASH_DEL(sdata->stratum_instances, client); HASH_DEL(sdata->stratum_instances, client);
if (user) { if (user) {
DL_DELETE(user->clients, client); DL_DELETE(user->clients, client);
__dec_worker(sdata, user); __dec_worker(sdata, user, client->worker_instance);
} }
} }
@ -4130,7 +4135,7 @@ static user_instance_t *generate_user(ckpool_t *ckp, stratum_instance_t *client,
client->user_instance = user; client->user_instance = user;
client->worker_instance = worker; client->worker_instance = worker;
DL_APPEND(user->clients, client); DL_APPEND(user->clients, client);
__inc_worker(sdata,user); __inc_worker(sdata,user, worker);
ck_wunlock(&sdata->instance_lock); ck_wunlock(&sdata->instance_lock);
if (new_user && !ckp->proxy) { if (new_user && !ckp->proxy) {

Loading…
Cancel
Save