Browse Source

Retrieve a new block template if more than 30 seconds has elapsed since the last one to keep the data current and test the pool is still alive.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
f71b423080
  1. 17
      cgminer.c
  2. 1
      miner.h

17
cgminer.c

@ -1622,6 +1622,7 @@ static bool work_decode(struct pool *pool, struct work *work, json_t *val) @@ -1622,6 +1622,7 @@ static bool work_decode(struct pool *pool, struct work *work, json_t *val)
if (pool->has_gbt) {
if (unlikely(!gbt_decode(pool, res_val)))
goto out;
gettimeofday(&pool->tv_template, NULL);
work->gbt = true;
ret = true;
goto out;
@ -4713,7 +4714,10 @@ static bool pool_active(struct pool *pool, bool pinging) @@ -4713,7 +4714,10 @@ static bool pool_active(struct pool *pool, bool pinging)
CURL *curl;
int rolltime;
applog(LOG_INFO, "Testing pool %s", pool->rpc_url);
if (pool->has_gbt)
applog(LOG_DEBUG, "Retrieving block template from pool %s", pool->rpc_url);
else
applog(LOG_INFO, "Testing pool %s", pool->rpc_url);
/* This is the central point we activate stratum when we can */
retry_stratum:
@ -5829,8 +5833,17 @@ static void *watchpool_thread(void __maybe_unused *userdata) @@ -5829,8 +5833,17 @@ static void *watchpool_thread(void __maybe_unused *userdata)
if (pool->enabled == POOL_DISABLED || pool->has_stratum)
continue;
/* Apart from longpollid comms, we retrieve a fresh
* template if more than 30 seconds has elapsed since
* the last one to keep the data current and as a test
* for when the pool dies. */
if (!pool->idle && pool->has_gbt && now.tv_sec - pool->tv_template.tv_sec > 60) {
if (!pool_active(pool, true))
pool_died(pool);
}
/* Test pool is idle once every minute */
if (pool->idle && now.tv_sec - pool->tv_idle.tv_sec > 60) {
if (pool->idle && now.tv_sec - pool->tv_idle.tv_sec > 30) {
gettimeofday(&pool->tv_idle, NULL);
if (pool_active(pool, true) && pool_tclear(pool, &pool->idle))
pool_resus(pool);

1
miner.h

@ -920,6 +920,7 @@ struct pool { @@ -920,6 +920,7 @@ struct pool {
unsigned char *txn_hashes;
int gbt_txns;
int coinbase_len;
struct timeval tv_template;
};
#define GETWORK_MODE_TESTPOOL 'T'

Loading…
Cancel
Save