diff --git a/cpu-miner.c b/cpu-miner.c index 72e0a6d1..d3527e14 100644 --- a/cpu-miner.c +++ b/cpu-miner.c @@ -728,7 +728,6 @@ static bool get_work(struct work *work) bool ret = false; unsigned int i; -get_new: if (unlikely(!queue_request())) goto out; @@ -737,31 +736,29 @@ get_new: if (unlikely(!work_heap)) goto out; + if (unlikely(first_work)) { + first_work = false; + /* send for extra work requests for the next time get_work + * is called. */ + for (i = 1; i < opt_queue; i++) { + if (unlikely(!queue_request())) + goto out_free; + } + } + if (unlikely(work_restart[opt_n_threads + gpu_threads].restart)) { work_restart[opt_n_threads + gpu_threads].restart = 0; - free(work_heap); if (opt_debug) applog(LOG_DEBUG, "New block detected, discarding old work"); for (i = 1; i < opt_queue; i++) { + free(work_heap); + if (unlikely(!queue_request())) + goto out; /* Pop off all the work. Cancelling the requests would * be better but tricky. */ work_heap = tq_pop(thr->q, NULL); if (unlikely(!work_heap)) goto out; - free(work_heap); - if (unlikely(!queue_request())) - goto out; - } - goto get_new; - } - - if (unlikely(first_work)) { - first_work = false; - /* send for extra work requests for the next time get_work - * is called. */ - for (i = 1; i < opt_queue; i++) { - if (unlikely(!queue_request())) - goto out_free; } }