Browse Source

Don't consider a pool lagging if a request has only just been filed.
This should decrease the false positives for "pool not providing work fast enough".

Con Kolivas 14 years ago
parent
commit
5d6159f55a
1 changed files with 13 additions and 13 deletions
  1. 13 13
      main.c

+ 13 - 13
main.c

@@ -4178,11 +4178,11 @@ static bool divide_work(struct timeval *now, struct work *work, uint32_t hash_di
 static bool get_work(struct work *work, bool requested, struct thr_info *thr,
 static bool get_work(struct work *work, bool requested, struct thr_info *thr,
 		     const int thr_id, uint32_t hash_div)
 		     const int thr_id, uint32_t hash_div)
 {
 {
+	bool newreq = false, ret = false;
 	struct timespec abstime = {};
 	struct timespec abstime = {};
 	struct timeval now;
 	struct timeval now;
 	struct work *work_heap;
 	struct work *work_heap;
 	struct pool *pool;
 	struct pool *pool;
-	bool ret = false;
 	int failures = 0;
 	int failures = 0;
 
 
 	/* Tell the watchdog thread this thread is waiting on getwork and
 	/* Tell the watchdog thread this thread is waiting on getwork and
@@ -4190,9 +4190,12 @@ static bool get_work(struct work *work, bool requested, struct thr_info *thr,
 	thread_reportout(thr);
 	thread_reportout(thr);
 retry:
 retry:
 	pool = current_pool();
 	pool = current_pool();
-	if (unlikely((!requested || requests_queued() < opt_queue) && !queue_request(thr, true))) {
-		applog(LOG_WARNING, "Failed to queue_request in get_work");
-		goto out;
+	if (!requested || requests_queued() < opt_queue) {
+		if (unlikely(!queue_request(thr, true))) {
+			applog(LOG_WARNING, "Failed to queue_request in get_work");
+			goto out;
+		}
+		newreq = true;
 	}
 	}
 
 
 	if (can_roll(work) && should_roll(work)) {
 	if (can_roll(work) && should_roll(work)) {
@@ -4201,17 +4204,14 @@ retry:
 		goto out;
 		goto out;
 	}
 	}
 
 
-	if (!requests_staged()) {
-		if (requested && 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 (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++;
 	}
 	}
 
 
-	requested = false;
+	newreq = requested = false;
 	gettimeofday(&now, NULL);
 	gettimeofday(&now, NULL);
 	abstime.tv_sec = now.tv_sec + 60;
 	abstime.tv_sec = now.tv_sec + 60;