Commit 0bbaaa9723f851ca1d92b7e44085af035b37941c

Con Kolivas 2013-03-12T22:07:06

Convert the control_lock to a cg_lock.

diff --git a/api.c b/api.c
index 96c087a..93dc51b 100644
--- a/api.c
+++ b/api.c
@@ -2449,16 +2449,16 @@ static void switchpool(struct io_data *io_data, __maybe_unused SOCKETTYPE c, cha
 	}
 
 	id = atoi(param);
-	mutex_lock(&control_lock);
+	cg_rlock(&control_lock);
 	if (id < 0 || id >= total_pools) {
-		mutex_unlock(&control_lock);
+		cg_runlock(&control_lock);
 		message(io_data, MSG_INVPID, id, NULL, isjson);
 		return;
 	}
 
 	pool = pools[id];
 	pool->enabled = POOL_ENABLED;
-	mutex_unlock(&control_lock);
+	cg_runlock(&control_lock);
 	switch_pools(pool);
 
 	message(io_data, MSG_SWITCHP, id, NULL, isjson);
diff --git a/cgminer.c b/cgminer.c
index 6e7cb95..b47618a 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -195,7 +195,7 @@ pthread_cond_t gws_cond;
 double total_mhashes_done;
 static struct timeval total_tv_start, total_tv_end;
 
-pthread_mutex_t control_lock;
+cglock_t control_lock;
 pthread_mutex_t stats_lock;
 
 int hw_errors;
@@ -503,9 +503,9 @@ struct pool *current_pool(void)
 {
 	struct pool *pool;
 
-	mutex_lock(&control_lock);
+	cg_rlock(&control_lock);
 	pool = currentpool;
-	mutex_unlock(&control_lock);
+	cg_runlock(&control_lock);
 	return pool;
 }
 
@@ -1423,9 +1423,9 @@ static struct work *make_work(void)
 
 	if (unlikely(!work))
 		quit(1, "Failed to calloc work in make_work");
-	mutex_lock(&control_lock);
+	cg_wlock(&control_lock);
 	work->id = total_work++;
-	mutex_unlock(&control_lock);
+	cg_wunlock(&control_lock);
 	return work;
 }
 
@@ -2411,14 +2411,14 @@ static uint64_t share_diff(const struct work *work)
 	if (unlikely(!d64))
 		d64 = 1;
 	ret = diffone / d64;
-	mutex_lock(&control_lock);
+	cg_wlock(&control_lock);
 	if (ret > best_diff) {
 		best_diff = ret;
 		suffix_string(best_diff, best_share, 0);
 	}
 	if (ret > work->pool->best_diff)
 		work->pool->best_diff = ret;
-	mutex_unlock(&control_lock);
+	cg_wunlock(&control_lock);
 	return ret;
 }
 
@@ -3390,7 +3390,7 @@ void switch_pools(struct pool *selected)
 	struct pool *pool, *last_pool;
 	int i, pool_no, next_pool;
 
-	mutex_lock(&control_lock);
+	cg_wlock(&control_lock);
 	last_pool = currentpool;
 	pool_no = currentpool->pool_no;
 
@@ -3445,7 +3445,7 @@ void switch_pools(struct pool *selected)
 
 	currentpool = pools[pool_no];
 	pool = currentpool;
-	mutex_unlock(&control_lock);
+	cg_wunlock(&control_lock);
 
 	/* Set the lagging flag to avoid pool not providing work fast enough
 	 * messages in failover only mode since  we have to get all fresh work
@@ -4816,9 +4816,9 @@ static int cp_prio(void)
 {
 	int prio;
 
-	mutex_lock(&control_lock);
+	cg_rlock(&control_lock);
 	prio = currentpool->prio;
-	mutex_unlock(&control_lock);
+	cg_runlock(&control_lock);
 	return prio;
 }
 
@@ -6977,14 +6977,14 @@ static void *test_pool_thread(void *arg)
 		pool_tset(pool, &pool->lagging);
 		pool_tclear(pool, &pool->idle);
 
-		mutex_lock(&control_lock);
+		cg_wlock(&control_lock);
 		if (!pools_active) {
 			currentpool = pool;
 			if (pool->pool_no != 0)
 				applog(LOG_NOTICE, "Switching to pool %d %s - first alive pool", pool->pool_no, pool->rpc_url);
 			pools_active = true;
 		}
-		mutex_unlock(&control_lock);
+		cg_wunlock(&control_lock);
 		pool_resus(pool);
 	} else
 		pool_died(pool);
@@ -7035,7 +7035,7 @@ int main(int argc, char *argv[])
 
 	mutex_init(&hash_lock);
 	mutex_init(&console_lock);
-	mutex_init(&control_lock);
+	cglock_init(&control_lock);
 	mutex_init(&stats_lock);
 	mutex_init(&sharelog_lock);
 	mutex_init(&ch_lock);
diff --git a/miner.h b/miner.h
index fadbf09..7d06c85 100644
--- a/miner.h
+++ b/miner.h
@@ -793,7 +793,7 @@ extern int opt_expiry;
 extern pthread_mutex_t cgusb_lock;
 #endif
 
-extern pthread_mutex_t control_lock;
+extern cglock_t control_lock;
 extern pthread_mutex_t hash_lock;
 extern pthread_mutex_t console_lock;
 extern pthread_mutex_t ch_lock;