Flag the pool that is the longpoll thread to avoid sending multiple longpolls during the slight delays between requesting and setting the lp_sent flag.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
diff --git a/cgminer.c b/cgminer.c
index b244210..8264db5 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -1592,7 +1592,7 @@ 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->hdr_path && !pool->lp_sent)) {
+ if (unlikely(pool == current_pool() && !pool->is_lp && pool->hdr_path && !pool->lp_sent)) {
req_longpoll = true;
url = pool->lp_url;
}
@@ -3566,6 +3566,7 @@ static void *longpoll_thread(void *userdata)
}
}
+ pool->is_lp = true;
have_longpoll = true;
applog(LOG_WARNING, "Long-polling activated for %s", pool->lp_url);
@@ -3610,7 +3611,9 @@ static void *longpoll_thread(void *userdata)
}
sp = select_longpoll_pool();
if (sp != pool) {
+ pool->is_lp = false;
pool = sp;
+ pool->is_lp = true;
applog(LOG_WARNING, "Long-polling changed to %s", pool->lp_url);
}
}
diff --git a/miner.h b/miner.h
index f75fe43..c383f91 100644
--- a/miner.h
+++ b/miner.h
@@ -538,6 +538,7 @@ struct pool {
char *hdr_path;
char *lp_url;
bool lp_sent;
+ bool is_lp;
unsigned int getwork_requested;
unsigned int stale_shares;