Browse Source

Queue one request for each staged request removed, keeping the staged request count optimal at all times.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
e68ecf5eb2
  1. 5
      cgminer.c

5
cgminer.c

@ -2610,6 +2610,7 @@ static void discard_stale(void)
if (stale) { if (stale) {
applog(LOG_DEBUG, "Discarded %d stales that didn't match current hash", stale); applog(LOG_DEBUG, "Discarded %d stales that didn't match current hash", stale);
while (stale-- > 0)
queue_request(NULL, false); queue_request(NULL, false);
} }
} }
@ -3780,7 +3781,6 @@ bool queue_request(struct thr_info *thr, bool needed)
static struct work *hash_pop(const struct timespec *abstime) static struct work *hash_pop(const struct timespec *abstime)
{ {
struct work *work = NULL; struct work *work = NULL;
bool queue = false;
int rc = 0; int rc = 0;
mutex_lock(stgd_lock); mutex_lock(stgd_lock);
@ -3791,12 +3791,9 @@ static struct work *hash_pop(const struct timespec *abstime)
work = staged_work; work = staged_work;
HASH_DEL(staged_work, work); HASH_DEL(staged_work, work);
work->pool->staged--; work->pool->staged--;
if (HASH_COUNT(staged_work) < (unsigned int)mining_threads)
queue = true;
} }
mutex_unlock(stgd_lock); mutex_unlock(stgd_lock);
if (queue)
queue_request(NULL, false); queue_request(NULL, false);
return work; return work;

Loading…
Cancel
Save