From c8601722752bcc6d3db7efd0063f7f2d7f2f7d2a Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Sun, 24 Jun 2012 21:52:07 +1000 Subject: [PATCH] Make sure to have at least one staged work item when deciding whether to queue another request or not and dec queued in free work not discard work. --- cgminer.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/cgminer.c b/cgminer.c index 483331af..1e854376 100644 --- a/cgminer.c +++ b/cgminer.c @@ -1892,8 +1892,17 @@ static struct work *make_work(void) return work; } +static inline void dec_queued(void) +{ + if (likely(total_queued > 0)) + total_queued--; +} + static void free_work(struct work *work) { + if (!work->clone) + dec_queued(); + free(work); } @@ -2377,17 +2386,8 @@ static inline void inc_queued(void) total_queued++; } -static inline void dec_queued(void) -{ - if (likely(total_queued > 0)) - total_queued--; -} - static void discard_work(struct work *work) { - if (!work->clone) - dec_queued(); - if (!work->clone && !work->rolls && !work->mined) { if (work->pool) work->pool->discarded_work++; @@ -3496,7 +3496,7 @@ static bool queue_request(struct thr_info *thr, bool needed) struct workio_cmd *wc; if ((total_queued >= opt_queue && rs >= mining_threads) || - total_queued >= mining_threads) + (total_queued >= mining_threads && rs)) return true; /* fill out work request message */