Browse Source

Merge commit 'cdde52d' into bfgminer

Conflicts:
	miner.c
Luke Dashjr 13 years ago
parent
commit
f220a1c5cd
2 changed files with 1 additions and 47 deletions
  1. 1 45
      miner.c
  2. 0 2
      miner.h

+ 1 - 45
miner.c

@@ -2850,16 +2850,6 @@ static void get_benchmark_work(struct work *work)
 
 static void wake_gws(void);
 
-static void finish_req_in_progress(struct pool *pool, __maybe_unused bool succeeded) {
-	pool->req_in_progress = false;
-	if (pool->extra_work_needed) {
-		mutex_lock(&pool->last_work_lock);
-		wake_gws();
-		pool->extra_work_needed = 0;
-		mutex_unlock(&pool->last_work_lock);
-	}
-}
-
 static void update_last_work(struct work *work)
 {
 	if (!work->tmpl)
@@ -2873,7 +2863,6 @@ static void update_last_work(struct work *work)
 	pool->last_work_copy = copy_work(work);
 	pool->last_work_copy->work_restart_id = pool->work_restart_id;
 	mutex_unlock(&pool->last_work_lock);
-	finish_req_in_progress(pool, true);
 }
 
 static char *prepare_rpc_req(struct work *work, enum pool_protocol proto, const char *lpid)
@@ -2961,13 +2950,7 @@ tryagain:
 	rpc_req = prepare_rpc_req(work, pool->proto, NULL);
 	work->pool = pool;
 	if (!rpc_req)
-	{
-		finish_req_in_progress(pool, false);
 		return false;
-	}
-
-	if (pool->proto == PLP_GETBLOCKTEMPLATE)
-		pool->req_in_progress = true;
 
 	applog(LOG_DEBUG, "DBG: sending %s get RPC call: %s", pool->rpc_url, rpc_req);
 
@@ -2986,15 +2969,11 @@ tryagain:
 		if (unlikely(!rc))
 			applog(LOG_DEBUG, "Failed to decode work in get_upstream_work");
 	} else if (PLP_NONE != (proto = pool_protocol_fallback(pool->proto))) {
-		finish_req_in_progress(pool, true);
 		applog(LOG_WARNING, "Pool %u failed getblocktemplate request; falling back to getwork protocol", pool->pool_no);
 		pool->proto = proto;
 		goto tryagain;
 	} else
-	{
-		finish_req_in_progress(pool, false);
 		applog(LOG_DEBUG, "Failed json_rpc_call in get_upstream_work");
-	}
 
 	gettimeofday(&(work->tv_getwork_reply), NULL);
 	timersub(&(work->tv_getwork_reply), &(work->tv_getwork), &tv_elapsed);
@@ -3020,8 +2999,6 @@ tryagain:
 
 	if (rc)
 		update_last_work(work);
-	else
-		finish_req_in_progress(pool, false);
 
 	if (likely(val))
 		json_decref(val);
@@ -4283,7 +4260,6 @@ static bool test_work_current(struct work *work)
 		HASH_ADD_STR(blocks, hash, s);
 		wr_unlock(&blk_lock);
 		work->pool->block_id = block_id;
-		finish_req_in_progress(work->pool, false);
 		if (deleted_block)
 			applog(LOG_DEBUG, "Deleted block %d from database", deleted_block);
 		template_nonce = 0;
@@ -5715,9 +5691,6 @@ tryagain:
 	if (!rpc_req)
 		return false;
 
-	if (pool->proto == proto && proto == PLP_GETBLOCKTEMPLATE)
-		pool->req_in_progress = true;
-
 	pool->probed = false;
 	gettimeofday(&tv_getwork, NULL);
 	val = json_rpc_call(curl, pool->rpc_url, pool->rpc_userpass, rpc_req,
@@ -5752,18 +5725,11 @@ retry_stratum:
 		if (pool->stratum_auth)
 			return pool->stratum_active;
 		if (!pool->stratum_active && !initiate_stratum(pool))
-		{
-			finish_req_in_progress(pool, false);
 			return false;
-		}
 		if (!auth_stratum(pool))
-		{
-			finish_req_in_progress(pool, false);
 			return false;
-		}
 		init_stratum_thread(pool);
 		detect_algo = 2;
-		finish_req_in_progress(pool, true);
 		return true;
 	}
 	else if (pool->has_stratum)
@@ -5802,7 +5768,6 @@ badwork:
 			applog(LOG_DEBUG, "Successfully retrieved but FAILED to decipher work from pool %u %s",
 			       pool->pool_no, pool->rpc_url);
 			pool->proto = proto = pool_protocol_fallback(proto);
-			finish_req_in_progress(pool, true);
 			if (PLP_NONE != proto)
 				goto tryagain;
 			free_work(work);
@@ -5844,7 +5809,6 @@ badwork:
 		}
 	} else if (PLP_NONE != (proto = pool_protocol_fallback(proto))) {
 		pool->proto = proto;
-		finish_req_in_progress(pool, true);
 		goto tryagain;
 	} else {
 		free_work(work);
@@ -5854,7 +5818,6 @@ badwork:
 			pool->has_stratum = true;
 			goto retry_stratum;
 		}
-		finish_req_in_progress(pool, false);
 		applog(LOG_DEBUG, "FAILED to retrieve work from pool %u %s",
 		       pool->pool_no, pool->rpc_url);
 		if (!pinging)
@@ -8067,14 +8030,7 @@ retry:
 				stage_work(work);
 				continue;
 			} else if (last_work->tmpl && pool->proto == PLP_GETBLOCKTEMPLATE && blkmk_work_left(last_work->tmpl) > (unsigned long)mining_threads) {
-				if (pool->req_in_progress) {
-					++pool->extra_work_needed;
-					mutex_unlock(&pool->last_work_lock);
-					applog(LOG_DEBUG, "Need more work while GBT request already in progress (pool %u), letting it provide work", pool->pool_no);
-					free_work(work);
-					continue;
-				}
-				pool->req_in_progress = true;
+				// Don't free last_work_copy, since it is used to detect upstream provides plenty of work per template
 			} else {
 				free_work(last_work);
 				pool->last_work_copy = NULL;

+ 0 - 2
miner.h

@@ -1006,8 +1006,6 @@ struct pool {
 
 	pthread_mutex_t last_work_lock;
 	struct work *last_work_copy;
-	bool req_in_progress;
-	unsigned extra_work_needed;
 };
 
 #define GETWORK_MODE_TESTPOOL 'T'