|
@@ -2421,13 +2421,18 @@ retry:
|
|
|
lagging = true;
|
|
lagging = true;
|
|
|
pool = ret_work->pool = select_pool(lagging);
|
|
pool = ret_work->pool = select_pool(lagging);
|
|
|
|
|
|
|
|
|
|
+ inc_queued();
|
|
|
|
|
+
|
|
|
if (!ce)
|
|
if (!ce)
|
|
|
ce = pop_curl_entry(pool);
|
|
ce = pop_curl_entry(pool);
|
|
|
|
|
|
|
|
- /* Inc queued count after ce is popped in case there're none
|
|
|
|
|
- * left and we think we've queued work when we're just waiting
|
|
|
|
|
- * for curls */
|
|
|
|
|
- inc_queued();
|
|
|
|
|
|
|
+ /* Check that we haven't staged work via other threads while
|
|
|
|
|
+ * waiting for a curl entry */
|
|
|
|
|
+ if (total_staged() >= maxq) {
|
|
|
|
|
+ dec_queued();
|
|
|
|
|
+ free_work(ret_work);
|
|
|
|
|
+ goto out;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
/* obtain new work from bitcoin via JSON-RPC */
|
|
/* obtain new work from bitcoin via JSON-RPC */
|
|
|
if (!get_upstream_work(ret_work, ce->curl)) {
|
|
if (!get_upstream_work(ret_work, ce->curl)) {
|