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

1
miner.h

@ -601,6 +601,7 @@ extern void switch_pools(struct pool *selected);
extern void write_config(FILE *fcfg); extern void write_config(FILE *fcfg);
extern void log_curses(int prio, const char *f, va_list ap); extern void log_curses(int prio, const char *f, va_list ap);
extern void clear_logwin(void); extern void clear_logwin(void);
extern bool pool_tclear(struct pool *pool, bool *var);
extern struct thread_q *tq_new(void); extern struct thread_q *tq_new(void);
extern void tq_free(struct thread_q *tq); extern void tq_free(struct thread_q *tq);
extern bool tq_push(struct thread_q *tq, void *data); 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,
rc = curl_easy_perform(curl); rc = curl_easy_perform(curl);
if (longpoll) if (longpoll)
pool->lp_sent = false; pool_tclear(pool, &pool->lp_sent);
if (rc) { if (rc) {
applog(LOG_INFO, "HTTP request failed: %s", curl_err_str); applog(LOG_INFO, "HTTP request failed: %s", curl_err_str);
goto err_out; goto err_out;

Loading…
Cancel
Save