|
|
@ -5306,12 +5306,12 @@ static void *stratum_sthread(void *userdata) |
|
|
|
quit(1, "Failed to create stratum_q in stratum_sthread"); |
|
|
|
quit(1, "Failed to create stratum_q in stratum_sthread"); |
|
|
|
|
|
|
|
|
|
|
|
while (42) { |
|
|
|
while (42) { |
|
|
|
char *noncehex, *nonce2, *nonce2hex; |
|
|
|
|
|
|
|
struct stratum_share *sshare; |
|
|
|
struct stratum_share *sshare; |
|
|
|
|
|
|
|
char *noncehex, *nonce2hex; |
|
|
|
uint32_t *hash32, nonce; |
|
|
|
uint32_t *hash32, nonce; |
|
|
|
|
|
|
|
char s[1024], nonce2[8]; |
|
|
|
struct work *work; |
|
|
|
struct work *work; |
|
|
|
bool submitted; |
|
|
|
bool submitted; |
|
|
|
char s[1024]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (unlikely(pool->removed)) |
|
|
|
if (unlikely(pool->removed)) |
|
|
|
break; |
|
|
|
break; |
|
|
@ -5320,6 +5320,14 @@ static void *stratum_sthread(void *userdata) |
|
|
|
if (unlikely(!work)) |
|
|
|
if (unlikely(!work)) |
|
|
|
quit(1, "Stratum q returned empty work"); |
|
|
|
quit(1, "Stratum q returned empty work"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (unlikely(work->nonce2_len > 8)) { |
|
|
|
|
|
|
|
applog(LOG_ERR, "Pool %d asking for inappropriately long nonce2 length %d", |
|
|
|
|
|
|
|
pool->pool_no, (int)work->nonce2_len); |
|
|
|
|
|
|
|
applog(LOG_ERR, "Not attempting to submit shares"); |
|
|
|
|
|
|
|
free_work(work); |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
sshare = calloc(sizeof(struct stratum_share), 1); |
|
|
|
sshare = calloc(sizeof(struct stratum_share), 1); |
|
|
|
hash32 = (uint32_t *)work->hash; |
|
|
|
hash32 = (uint32_t *)work->hash; |
|
|
|
submitted = false; |
|
|
|
submitted = false; |
|
|
@ -5336,8 +5344,8 @@ static void *stratum_sthread(void *userdata) |
|
|
|
sshare->id = swork_id++; |
|
|
|
sshare->id = swork_id++; |
|
|
|
mutex_unlock(&sshare_lock); |
|
|
|
mutex_unlock(&sshare_lock); |
|
|
|
|
|
|
|
|
|
|
|
nonce2 = alloca(work->nonce2_len); |
|
|
|
memset(nonce2, 0, 8); |
|
|
|
memset(nonce2, 0, work->nonce2_len); |
|
|
|
/* We only use uint32_t sized nonce2 increments internally */ |
|
|
|
memcpy(nonce2, &work->nonce2, sizeof(uint32_t)); |
|
|
|
memcpy(nonce2, &work->nonce2, sizeof(uint32_t)); |
|
|
|
nonce2hex = bin2hex((const unsigned char *)nonce2, work->nonce2_len); |
|
|
|
nonce2hex = bin2hex((const unsigned char *)nonce2, work->nonce2_len); |
|
|
|
if (unlikely(!nonce2hex)) |
|
|
|
if (unlikely(!nonce2hex)) |
|
|
|