Browse Source

Remove the sshare hash entry if we failed to send it.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
9698858abc
  1. 7
      cgminer.c
  2. 27
      util.c

7
cgminer.c

@ -2767,7 +2767,12 @@ static void *submit_work_thread(void *userdata)
applog(LOG_INFO, "Submitting share %08lx to pool %d", (unsigned long)(hash32[6]), pool->pool_no); applog(LOG_INFO, "Submitting share %08lx to pool %d", (unsigned long)(hash32[6]), pool->pool_no);
stratum_send(pool, s, strlen(s)); if (unlikely(!stratum_send(pool, s, strlen(s)))) {
mutex_lock(&sshare_lock);
HASH_DEL(stratum_shares, sshare);
mutex_unlock(&sshare_lock);
free(sshare);
}
goto out; goto out;
} }

27
util.c

@ -1189,9 +1189,10 @@ out:
bool initiate_stratum(struct pool *pool) bool initiate_stratum(struct pool *pool)
{ {
json_t *val = NULL, *res_val, *err_val, *notify_val; json_t *val = NULL, *res_val, *err_val, *notify_val;
bool ret = false, notify = false;
char *s, *buf, *sret = NULL; char *s, *buf, *sret = NULL;
json_error_t err; json_error_t err;
bool ret = false; int i, arr_size;
if (pool->stratum_active) if (pool->stratum_active)
return true; return true;
@ -1232,7 +1233,8 @@ bool initiate_stratum(struct pool *pool)
err_val = json_object_get(val, "error"); err_val = json_object_get(val, "error");
if (!res_val || json_is_null(res_val) || if (!res_val || json_is_null(res_val) ||
(err_val && !json_is_null(err_val))) { (err_val && !json_is_null(err_val)) ||
!json_is_array(res_val)) {
char *ss; char *ss;
if (err_val) if (err_val)
@ -1247,17 +1249,26 @@ bool initiate_stratum(struct pool *pool)
goto out; goto out;
} }
notify_val = json_array_get(res_val, 0); arr_size = json_array_size(res_val);
if (!notify_val || json_is_null(notify_val)) { for (i = 0; i < arr_size; i++) {
applog(LOG_INFO, "Failed to parse notify_val in initiate_stratum"); notify_val = json_array_get(res_val, i);
goto out; if (!notify_val || json_is_null(notify_val)) {
applog(LOG_INFO, "Failed to parse notify_val in initiate_stratum");
goto out;
}
buf = __json_array_string(notify_val, 0);
if (buf && !strcasecmp(buf, "mining.notify")) {
notify = true;
break;
}
} }
buf = __json_array_string(notify_val, 0); if (!notify) {
if (!buf || strcasecmp(buf, "mining.notify")) {
applog(LOG_INFO, "Failed to get mining notify in initiate_stratum"); applog(LOG_INFO, "Failed to get mining notify in initiate_stratum");
goto out; goto out;
} }
pool->subscription = json_array_string(notify_val, 1); pool->subscription = json_array_string(notify_val, 1);
if (!pool->subscription) { if (!pool->subscription) {
applog(LOG_INFO, "Failed to get a subscription in initiate_stratum"); applog(LOG_INFO, "Failed to get a subscription in initiate_stratum");

Loading…
Cancel
Save