Browse Source

Do not try to generate stratum work unless the notify command has succeeded.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
e1d7ecdd35
  1. 18
      cgminer.c
  2. 1
      miner.h
  3. 21
      util.c

18
cgminer.c

@ -4623,6 +4623,15 @@ static void wait_lpcurrent(struct pool *pool);
static void pool_resus(struct pool *pool); static void pool_resus(struct pool *pool);
static void gen_stratum_work(struct pool *pool, struct work *work); static void gen_stratum_work(struct pool *pool, struct work *work);
static void stratum_resumed(struct pool *pool)
{
if (!pool->stratum_notify)
return;
applog(LOG_INFO, "Stratum connection to pool %d resumed", pool->pool_no);
pool_tclear(pool, &pool->idle);
pool_resus(pool);
}
/* One stratum thread per pool that has stratum waits on the socket checking /* One stratum thread per pool that has stratum waits on the socket checking
* for new messages and for the integrity of the socket connection. We reset * for new messages and for the integrity of the socket connection. We reset
* the connection based on the integrity of the receive side only as the send * the connection based on the integrity of the receive side only as the send
@ -4697,18 +4706,13 @@ static void *stratum_thread(void *userdata)
goto out; goto out;
sleep(30); sleep(30);
} }
applog(LOG_INFO, "Stratum connection to pool %d resumed", pool->pool_no); stratum_resumed(pool);
pool_tclear(pool, &pool->idle);
pool_resus(pool);
continue; continue;
} }
/* Check this pool hasn't died while being a backup pool and /* Check this pool hasn't died while being a backup pool and
* has not had its idle flag cleared */ * has not had its idle flag cleared */
if (pool_tclear(pool, &pool->idle)) { stratum_resumed(pool);
applog(LOG_INFO, "Stratum connection to pool %d resumed", pool->pool_no);
pool_resus(pool);
}
if (!parse_method(pool, s) && !parse_stratum_response(pool, s)) if (!parse_method(pool, s) && !parse_stratum_response(pool, s))
applog(LOG_INFO, "Unknown stratum msg: %s", s); applog(LOG_INFO, "Unknown stratum msg: %s", s);

1
miner.h

@ -937,6 +937,7 @@ struct pool {
bool has_stratum; bool has_stratum;
bool stratum_active; bool stratum_active;
bool stratum_auth; bool stratum_auth;
bool stratum_notify;
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;

21
util.c

@ -1055,13 +1055,13 @@ static char *json_array_string(json_t *val, unsigned int entry)
static bool parse_notify(struct pool *pool, json_t *val) static bool parse_notify(struct pool *pool, json_t *val)
{ {
char *job_id, *prev_hash, *coinbase1, *coinbase2, *bbversion, *nbit, *ntime; char *job_id, *prev_hash, *coinbase1, *coinbase2, *bbversion, *nbit, *ntime;
bool clean, ret = false;
int merkles, i; int merkles, i;
json_t *arr; json_t *arr;
bool clean;
arr = json_array_get(val, 4); arr = json_array_get(val, 4);
if (!arr || !json_is_array(arr)) if (!arr || !json_is_array(arr))
return false; goto out;
merkles = json_array_size(arr); merkles = json_array_size(arr);
@ -1090,7 +1090,7 @@ static bool parse_notify(struct pool *pool, json_t *val)
free(nbit); free(nbit);
if (ntime) if (ntime)
free(ntime); free(ntime);
return false; goto out;
} }
mutex_lock(&pool->pool_lock); mutex_lock(&pool->pool_lock);
@ -1137,7 +1137,9 @@ static bool parse_notify(struct pool *pool, json_t *val)
/* A notify message is the closest stratum gets to a getwork */ /* A notify message is the closest stratum gets to a getwork */
pool->getwork_requested++; pool->getwork_requested++;
total_getworks++; total_getworks++;
return true; ret = true;
out:
return ret;
} }
static bool parse_diff(struct pool *pool, json_t *val) static bool parse_diff(struct pool *pool, json_t *val)
@ -1241,8 +1243,11 @@ bool parse_method(struct pool *pool, char *s)
if (!buf) if (!buf)
goto out; goto out;
if (!strncasecmp(buf, "mining.notify", 13) && parse_notify(pool, params)) { if (!strncasecmp(buf, "mining.notify", 13)) {
ret = true; if (parse_notify(pool, params))
pool->stratum_notify = ret = true;
else
pool->stratum_notify = ret = false;
goto out; goto out;
} }
@ -1308,6 +1313,10 @@ bool auth_stratum(struct pool *pool)
goto out; goto out;
} }
if (!pool->stratum_notify)
goto out;
ret = true; ret = true;
applog(LOG_INFO, "Stratum authorisation success for pool %d", pool->pool_no); applog(LOG_INFO, "Stratum authorisation success for pool %d", pool->pool_no);
pool->probed = true; pool->probed = true;

Loading…
Cancel
Save