From 6f741597f882c226824089ad6c6a536f2e140408 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Sat, 20 Aug 2011 23:36:18 +1000 Subject: [PATCH] Use any longpoll available, and don't disable it if switching to a server that doesn't have it. --- main.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/main.c b/main.c index 4b4b3d31..bf7ddfb5 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 */