|
|
@@ -1197,6 +1197,11 @@ static bool work_decode(const json_t *val, struct work *work)
|
|
|
sha2_starts( &ctx, 0 );
|
|
|
sha2_update( &ctx, data.c, 64 );
|
|
|
memcpy(work->midstate, ctx.state, sizeof(work->midstate));
|
|
|
+#if defined(__BIG_ENDIAN__) || defined(MIPSEB)
|
|
|
+ int i;
|
|
|
+ for (i = 0; i < 8; i++)
|
|
|
+ (((uint32_t*) (work->midstate))[i]) = swab32(((uint32_t*) (work->midstate))[i]);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
if (likely(!jobj_binary(val, "hash1", work->hash1, sizeof(work->hash1), false))) {
|
|
|
@@ -1211,18 +1216,6 @@ static bool work_decode(const json_t *val, struct work *work)
|
|
|
|
|
|
memset(work->hash, 0, sizeof(work->hash));
|
|
|
|
|
|
-#ifdef __BIG_ENDIAN__
|
|
|
- int swapcounter = 0;
|
|
|
- for (swapcounter = 0; swapcounter < 32; swapcounter++)
|
|
|
- (((uint32_t*) (work->data))[swapcounter]) = swab32(((uint32_t*) (work->data))[swapcounter]);
|
|
|
- for (swapcounter = 0; swapcounter < 16; swapcounter++)
|
|
|
- (((uint32_t*) (work->hash1))[swapcounter]) = swab32(((uint32_t*) (work->hash1))[swapcounter]);
|
|
|
- for (swapcounter = 0; swapcounter < 8; swapcounter++)
|
|
|
- (((uint32_t*) (work->midstate))[swapcounter]) = swab32(((uint32_t*) (work->midstate))[swapcounter]);
|
|
|
- for (swapcounter = 0; swapcounter < 8; swapcounter++)
|
|
|
- (((uint32_t*) (work->target))[swapcounter]) = swab32(((uint32_t*) (work->target))[swapcounter]);
|
|
|
-#endif
|
|
|
-
|
|
|
gettimeofday(&work->tv_staged, NULL);
|
|
|
|
|
|
return true;
|
|
|
@@ -1740,8 +1733,10 @@ static bool submit_upstream_work(const struct work *work, CURL *curl)
|
|
|
/* Once we have more than a nominal amount of sequential rejects,
|
|
|
* at least 10 and more than 3 mins at the current utility,
|
|
|
* disable the pool because some pool error is likely to have
|
|
|
- * ensued. */
|
|
|
- if (pool->seq_rejects > 10 && opt_disable_pool && total_pools > 1) {
|
|
|
+ * ensued. Do not do this if we know the share just happened to
|
|
|
+ * be stale due to networking delays.
|
|
|
+ */
|
|
|
+ if (pool->seq_rejects > 10 && !work->stale && opt_disable_pool && total_pools > 1) {
|
|
|
double utility = total_accepted / ( total_secs ? total_secs : 1 ) * 60;
|
|
|
|
|
|
if (pool->seq_rejects > utility * 3) {
|
|
|
@@ -2179,6 +2174,7 @@ static void *submit_work_thread(void *userdata)
|
|
|
pool->stale_shares++;
|
|
|
goto out;
|
|
|
}
|
|
|
+ work->stale = true;
|
|
|
}
|
|
|
|
|
|
ce = pop_curl_entry(pool);
|