diff --git a/src/stratifier.c b/src/stratifier.c index dada019f..b8dff8d8 100644 --- a/src/stratifier.c +++ b/src/stratifier.c @@ -707,10 +707,12 @@ static void send_ageworkinfo(ckpool_t *ckp, const int64_t id) ckdbq_add(ckp, ID_AGEWORKINFO, val); } -static void add_base(ckpool_t *ckp, workbase_t *wb, bool *new_block) +/* Add a new workbase to the table of workbases. Sdata is the global data in + * pool mode but unique to each subproxy in proxy mode */ +static void add_base(ckpool_t *ckp, sdata_t *sdata, workbase_t *wb, bool *new_block) { workbase_t *tmp, *tmpa, *aged = NULL; - sdata_t *sdata = ckp->data; + sdata_t *ckp_sdata = ckp->data; int len, ret; ts_realtime(&wb->gentime); @@ -723,7 +725,7 @@ static void add_base(ckpool_t *ckp, workbase_t *wb, bool *new_block) * we set workbase_id from it. In server mode the stratifier is * setting the workbase_id */ ck_wlock(&sdata->workbase_lock); - sdata->workbases_generated++; + ckp_sdata->workbases_generated++; if (!ckp->proxy) wb->id = sdata->workbase_id++; else @@ -905,7 +907,7 @@ static void *do_update(void *arg) json_decref(val); generate_coinbase(ckp, wb); - add_base(ckp, wb, &new_block); + add_base(ckp, sdata, wb, &new_block); stratum_broadcast_update(sdata, new_block); ret = true; @@ -1254,7 +1256,7 @@ static void update_notify(ckpool_t *ckp, const char *cmd) wb->diff = proxy->diff; ck_runlock(&dsdata->workbase_lock); - add_base(ckp, wb, &new_block); + add_base(ckp, dsdata, wb, &new_block); /* FIXME: Goes to everyone, separate by proxy only */ stratum_broadcast_update(sdata, new_block | clean);