Browse Source

Set the lp_sent variable under lock since there will almost always be a race on setting this variable, potentially leading to multiple LPs being sent

out.
nfactor-troky
Con Kolivas 12 years ago
parent
commit
f4284a21a8
  1. 10
      cgminer.c
  2. 1
      miner.h
  3. 2
      util.c

10
cgminer.c

@ -336,7 +336,7 @@ static bool pool_tset(struct pool *pool, bool *var) @@ -336,7 +336,7 @@ static bool pool_tset(struct pool *pool, bool *var)
return ret;
}
static bool pool_tclear(struct pool *pool, bool *var)
bool pool_tclear(struct pool *pool, bool *var)
{
bool ret;
@ -1592,10 +1592,10 @@ static bool get_upstream_work(struct work *work, bool lagging) @@ -1592,10 +1592,10 @@ static bool get_upstream_work(struct work *work, bool lagging)
/* If this is the current pool and supports longpoll but has not sent
* a longpoll, send one now */
if (unlikely(pool == current_pool() && !pool->is_lp && pool->hdr_path && !pool->lp_sent)) {
pool->lp_sent = true;
req_longpoll = true;
url = pool->lp_url;
if (unlikely(!pool->is_lp && pool == current_pool() && pool->hdr_path &&
!pool_tset(pool, &pool->lp_sent))) {
req_longpoll = true;
url = pool->lp_url;
}
retry:

1
miner.h

@ -601,6 +601,7 @@ extern void switch_pools(struct pool *selected); @@ -601,6 +601,7 @@ extern void switch_pools(struct pool *selected);
extern void write_config(FILE *fcfg);
extern void log_curses(int prio, const char *f, va_list ap);
extern void clear_logwin(void);
extern bool pool_tclear(struct pool *pool, bool *var);
extern struct thread_q *tq_new(void);
extern void tq_free(struct thread_q *tq);
extern bool tq_push(struct thread_q *tq, void *data);

2
util.c

@ -351,7 +351,7 @@ json_t *json_rpc_call(CURL *curl, const char *url, @@ -351,7 +351,7 @@ json_t *json_rpc_call(CURL *curl, const char *url,
rc = curl_easy_perform(curl);
if (longpoll)
pool->lp_sent = false;
pool_tclear(pool, &pool->lp_sent);
if (rc) {
applog(LOG_INFO, "HTTP request failed: %s", curl_err_str);
goto err_out;

Loading…
Cancel
Save