From df7370d0663b2adba3fb9efd51f12771bce6e851 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Mon, 24 Dec 2012 10:26:56 +1100 Subject: [PATCH] Go back to cloning available work under staged lock. --- cgminer.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/cgminer.c b/cgminer.c index b08ad3a6..56b05353 100644 --- a/cgminer.c +++ b/cgminer.c @@ -2999,14 +2999,14 @@ static struct work *make_clone(struct work *work) static void stage_work(struct work *work); -/* Called with stgd_lock held */ -static bool __clone_available(void) +static bool clone_available(void) { struct work *work, *tmp; bool cloned = false; + mutex_lock(stgd_lock); if (!staged_rollable) - goto out; + goto out_unlock; HASH_ITER(hh, staged_work, work, tmp) { if (can_roll(work) && should_roll(work)) { @@ -3022,7 +3022,9 @@ static bool __clone_available(void) } } -out: +out_unlock: + mutex_unlock(stgd_lock); + return cloned; } @@ -6864,7 +6866,7 @@ retry: continue; } - if (__clone_available()) { + if (clone_available()) { applog(LOG_DEBUG, "Cloned getwork work"); free_work(work); continue;