Browse Source

Instead of keeping track of when the last work item was generated to keep stratum connections open, keep them open if any shares have been submitted awaiting a response.

nfactor-troky
ckolivas 12 years ago
parent
commit
386ea2dffb
  1. 14
      cgminer.c
  2. 2
      miner.h

14
cgminer.c

@ -3264,6 +3264,7 @@ static void *submit_work_thread(void *userdata)
applog(LOG_WARNING, "Pool %d communication resumed, submitting work", pool->pool_no); applog(LOG_WARNING, "Pool %d communication resumed, submitting work", pool->pool_no);
mutex_lock(&sshare_lock); mutex_lock(&sshare_lock);
HASH_ADD_INT(stratum_shares, id, sshare); HASH_ADD_INT(stratum_shares, id, sshare);
pool->sshares++;
mutex_unlock(&sshare_lock); mutex_unlock(&sshare_lock);
applog(LOG_DEBUG, "Successfully submitted, adding to stratum_shares db"); applog(LOG_DEBUG, "Successfully submitted, adding to stratum_shares db");
submitted = true; submitted = true;
@ -3749,7 +3750,6 @@ static void stage_work(struct work *work)
{ {
applog(LOG_DEBUG, "Pushing work from pool %d to hash queue", work->pool->pool_no); applog(LOG_DEBUG, "Pushing work from pool %d to hash queue", work->pool->pool_no);
work->work_block = work_block; work->work_block = work_block;
work->pool->last_work_time = time(NULL);
test_work_current(work); test_work_current(work);
hash_push(work); hash_push(work);
} }
@ -4704,8 +4704,10 @@ static bool parse_stratum_response(struct pool *pool, char *s)
id = json_integer_value(id_val); id = json_integer_value(id_val);
mutex_lock(&sshare_lock); mutex_lock(&sshare_lock);
HASH_FIND_INT(stratum_shares, &id, sshare); HASH_FIND_INT(stratum_shares, &id, sshare);
if (sshare) if (sshare) {
HASH_DEL(stratum_shares, sshare); HASH_DEL(stratum_shares, sshare);
pool->sshares--;
}
mutex_unlock(&sshare_lock); mutex_unlock(&sshare_lock);
if (!sshare) { if (!sshare) {
if (json_is_true(res_val)) if (json_is_true(res_val))
@ -4738,6 +4740,7 @@ void clear_stratum_shares(struct pool *pool)
HASH_DEL(stratum_shares, sshare); HASH_DEL(stratum_shares, sshare);
diff_cleared += sshare->work->work_difficulty; diff_cleared += sshare->work->work_difficulty;
free_work(sshare->work); free_work(sshare->work);
pool->sshares--;
free(sshare); free(sshare);
cleared++; cleared++;
} }
@ -4792,9 +4795,9 @@ static bool cnx_needed(struct pool *pool)
return true; return true;
if (!cp->has_gbt && !cp->has_stratum && (!opt_fail_only || !cp->hdr_path)) if (!cp->has_gbt && !cp->has_stratum && (!opt_fail_only || !cp->hdr_path))
return true; return true;
/* Keep the connection open to allow any stray shares to be submitted /* If we're waiting for a response from shares submitted, keep the
* on switching pools for 2 minutes. */ * connection open. */
if (time(NULL) < pool->last_work_time + 120) if (pool->sshares)
return true; return true;
return false; return false;
} }
@ -5181,7 +5184,6 @@ static struct work *hash_pop(void)
/* Signal hash_pop again in case there are mutliple hash_pop waiters */ /* Signal hash_pop again in case there are mutliple hash_pop waiters */
pthread_cond_signal(&getq->cond); pthread_cond_signal(&getq->cond);
mutex_unlock(stgd_lock); mutex_unlock(stgd_lock);
work->pool->last_work_time = time(NULL);
return work; return work;
} }

2
miner.h

@ -972,7 +972,6 @@ struct pool {
pthread_cond_t cr_cond; pthread_cond_t cr_cond;
struct list_head curlring; struct list_head curlring;
time_t last_work_time;
time_t last_share_time; time_t last_share_time;
double last_share_diff; double last_share_diff;
uint64_t best_diff; uint64_t best_diff;
@ -1000,6 +999,7 @@ struct pool {
struct stratum_work swork; struct stratum_work swork;
pthread_t stratum_thread; pthread_t stratum_thread;
pthread_mutex_t stratum_lock; pthread_mutex_t stratum_lock;
int sshares; /* stratum shares submitted waiting on response */
/* GBT variables */ /* GBT variables */
bool has_gbt; bool has_gbt;

Loading…
Cancel
Save