Browse Source

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

master
Con Kolivas 11 years ago
parent
commit
b1b79e0efc
  1. 13
      src/stratifier.c

13
src/stratifier.c

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

Loading…
Cancel
Save