diff --git a/cgminer.c b/cgminer.c index 13efa3e3..b5af3bfa 100644 --- a/cgminer.c +++ b/cgminer.c @@ -3000,7 +3000,7 @@ static void stage_work(struct work *work); static bool clone_available(void) { - struct work *work, *tmp; + struct work *work_clone = NULL, *work, *tmp; bool cloned = false; mutex_lock(stgd_lock); @@ -3009,13 +3009,10 @@ static bool clone_available(void) HASH_ITER(hh, staged_work, work, tmp) { if (can_roll(work) && should_roll(work)) { - struct work *work_clone; - roll_work(work); work_clone = make_clone(work); roll_work(work); applog(LOG_DEBUG, "Pushing cloned available work to stage thread"); - stage_work(work_clone); cloned = true; break; } @@ -3024,6 +3021,8 @@ static bool clone_available(void) out_unlock: mutex_unlock(stgd_lock); + if (cloned) + stage_work(work_clone); return cloned; }