There is no need to hold the workbase lock when submitting a share

This commit is contained in:
Con Kolivas 2014-05-18 23:43:08 +10:00
parent 50f7da96bb
commit b1b79e0efc

View File

@ -1208,10 +1208,10 @@ out_unlock:
}
/* Submit a share in proxy mode to the parent pool. workbase_lock is held */
static void __submit_share(stratum_instance_t *client, workbase_t *wb, uint64_t jobid,
const char *nonce2, const char *ntime, const char *nonce)
static void submit_share(stratum_instance_t *client, uint64_t jobid, const char *nonce2,
const char *ntime, const char *nonce)
{
ckpool_t *ckp = wb->ckp;
ckpool_t *ckp = client->ckp;
json_t *json_msg;
char enonce2[32];
char *msg;
@ -1228,7 +1228,7 @@ static void __submit_share(stratum_instance_t *client, workbase_t *wb, uint64_t
static json_t *parse_submit(stratum_instance_t *client, json_t *json_msg,
json_t *params_val, json_t **err_val)
{
bool share = false, result = false, invalid = true;
bool share = false, result = false, invalid = true, submit = false;
const char *user, *job_id, *nonce2, *ntime, *nonce;
char hexhash[68], sharehash[32], *logdir;
int len, diff, wdiff;
@ -1316,10 +1316,13 @@ static json_t *parse_submit(stratum_instance_t *client, json_t *json_msg,
}
invalid = false;
if (wb->proxy && sdiff > wdiff)
__submit_share(client, wb, id, nonce2, ntime, nonce);
submit = true;
out_unlock:
ck_runlock(&workbase_lock);
if (submit)
submit_share(client, id, nonce2, ntime, nonce);
/* Accept the lower of new and old diffs until the next update */
if (id < client->diff_change_job_id && client->old_diff < client->diff)
diff = client->old_diff;