Use any longpoll available, and don't disable it if switching to a server that doesn't have it.
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 44 45 46 47 48
diff --git a/main.c b/main.c
index 4b4b3d3..bf7ddfb 100644
--- a/main.c
+++ b/main.c
@@ -2002,7 +2002,9 @@ static void switch_pools(struct pool *selected)
if (pool != last_pool) {
applog(LOG_WARNING, "Switching to %s", pool->rpc_url);
- restart_longpoll();
+ /* Only switch longpoll if the new pool also supports LP */
+ if (pool->hdr_path)
+ restart_longpoll();
}
/* Reset the queued amount to allow more to be queued for the new pool */
@@ -4726,8 +4728,30 @@ int main (int argc, char *argv[])
if (!pools_active)
quit(0, "No pools active! Exiting.");
- if (want_longpoll)
- start_longpoll();
+ /* If we want longpoll, enable it for the chosen default pool, or, if
+ * the pool does not support longpoll, find the first one that does
+ * and use its longpoll support */
+ if (want_longpoll) {
+ if (currentpool->hdr_path)
+ start_longpoll();
+ else {
+ for (i = 0; i < total_pools; i++) {
+ struct pool *pool;
+
+ pool = pools[i];
+ if (pool->hdr_path) {
+ struct pool *temp = currentpool;
+
+ currentpool = pool;
+ start_longpoll();
+ /* Not real blocking, but good enough */
+ sleep(1);
+ currentpool = temp;
+ break;
+ }
+ }
+ }
+ }
#ifdef HAVE_OPENCL
/* start GPU mining threads */