diff --git a/src/stratifier.c b/src/stratifier.c index 64e47bf3..ca2bb775 100644 --- a/src/stratifier.c +++ b/src/stratifier.c @@ -328,6 +328,8 @@ struct proxy_base { }; struct stratifier_data { + ckpool_t *ckp; + char pubkeytxnbin[25]; char donkeytxnbin[25]; @@ -1006,6 +1008,8 @@ static sdata_t *duplicate_sdata(const sdata_t *sdata) sdata_t *dsdata = ckzalloc(sizeof(sdata_t)); int64_t randomiser; + dsdata->ckp = sdata->ckp; + /* Copy the transaction binaries for workbase creation */ memcpy(dsdata->pubkeytxnbin, sdata->pubkeytxnbin, 25); memcpy(dsdata->donkeytxnbin, sdata->donkeytxnbin, 25); @@ -1272,7 +1276,6 @@ static void update_notify(ckpool_t *ckp, const char *cmd) add_base(ckp, dsdata, wb, &new_block); - /* FIXME: Goes to everyone, separate by proxy only */ stratum_broadcast_update(sdata, new_block | clean); out: json_decref(val); @@ -1549,6 +1552,7 @@ static inline bool client_active(stratum_instance_t *client) * locks. Sends only to sdata bound clients (everyone in ckpool) */ static void stratum_broadcast(sdata_t *sdata, json_t *val) { + sdata_t *ckp_sdata = sdata->ckp->data; stratum_instance_t *client, *tmp; ckmsg_t *bulk_send = NULL; ckmsgq_t *ssends; @@ -1563,7 +1567,7 @@ static void stratum_broadcast(sdata_t *sdata, json_t *val) ckmsg_t *client_msg; smsg_t *msg; - if (client->sdata != sdata) + if (sdata != ckp_sdata && client->sdata != sdata) continue; if (!client_active(client)) continue; @@ -4630,6 +4634,7 @@ int stratifier(proc_instance_t *pi) LOGWARNING("%s stratifier starting", ckp->name); sdata = ckzalloc(sizeof(sdata_t)); ckp->data = sdata; + sdata->ckp = ckp; /* Wait for the generator to have something for us */ do {