Check that all threads on the device that called get_work are waiting on getwork before considering the pool lagging.
diff --git a/cgminer.c b/cgminer.c
index 40c96da..35e133d 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -3632,11 +3632,26 @@ retry:
goto out;
}
- if (requested && !newreq && !requests_staged() && requests_queued() >= mining_threads &&
- !pool_tset(pool, &pool->lagging)) {
- applog(LOG_WARNING, "Pool %d not providing work fast enough", pool->pool_no);
- pool->getfail_occasions++;
- total_go++;
+ if (!pool->lagging && requested && !newreq && !requests_staged() && requests_queued() >= mining_threads) {
+ struct cgpu_info *cgpu = thr->cgpu;
+ bool stalled = true;
+ int i;
+
+ /* Check to see if all the threads on the device that called
+ * get_work are waiting on work and only consider the pool
+ * lagging if true */
+ for (i = 0; i < cgpu->threads; i++) {
+ if (!cgpu->thr[i]->getwork) {
+ stalled = false;
+ break;
+ }
+ }
+
+ if (stalled && !pool_tset(pool, &pool->lagging)) {
+ applog(LOG_WARNING, "Pool %d not providing work fast enough", pool->pool_no);
+ pool->getfail_occasions++;
+ total_go++;
+ }
}
newreq = requested = false;