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); @@ -4623,6 +4623,15 @@ static void wait_lpcurrent(struct pool *pool);
static void pool_resus(struct pool *pool);
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
* 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
@ -4697,18 +4706,13 @@ static void *stratum_thread(void *userdata) @@ -4697,18 +4706,13 @@ static void *stratum_thread(void *userdata)
goto out;
sleep(30);
}
applog(LOG_INFO, "Stratum connection to pool %d resumed", pool->pool_no);
pool_tclear(pool, &pool->idle);
pool_resus(pool);
stratum_resumed(pool);
continue;
}
/* Check this pool hasn't died while being a backup pool and
* has not had its idle flag cleared */
if (pool_tclear(pool, &pool->idle)) {
applog(LOG_INFO, "Stratum connection to pool %d resumed", pool->pool_no);
pool_resus(pool);
}
stratum_resumed(pool);
if (!parse_method(pool, s) && !parse_stratum_response(pool, s))
applog(LOG_INFO, "Unknown stratum msg: %s", s);

1
miner.h

@ -937,6 +937,7 @@ struct pool { @@ -937,6 +937,7 @@ struct pool {
bool has_stratum;
bool stratum_active;
bool stratum_auth;
bool stratum_notify;
struct stratum_work swork;
pthread_t stratum_thread;
pthread_mutex_t stratum_lock;

21
util.c

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

Loading…
Cancel
Save