diff --git a/cgminer.c b/cgminer.c index c9909114..10613b50 100644 --- a/cgminer.c +++ b/cgminer.c @@ -6135,6 +6135,13 @@ static void *watchpool_thread(void __maybe_unused *userdata) if (pool->enabled == POOL_DISABLED) continue; + /* Don't start testing any pools if the test threads + * from startup are still doing their first attempt. */ + if (unlikely(pool->testing)) { + pthread_join(pool->test_thread, NULL); + pool->testing = false; + } + /* Test pool is idle once every minute */ if (pool->idle && now.tv_sec - pool->tv_idle.tv_sec > 30) { gettimeofday(&pool->tv_idle, NULL); @@ -6991,10 +6998,10 @@ static void probe_pools(void) int i; for (i = 0; i < total_pools; i++) { - pthread_t *test_thread = malloc(sizeof(pthread_t)); struct pool *pool = pools[i]; - pthread_create(test_thread, NULL, test_pool_thread, (void *)pool); + pool->testing = true; + pthread_create(&pool->test_thread, NULL, test_pool_thread, (void *)pool); } } diff --git a/miner.h b/miner.h index eee30f13..a44b9c1a 100644 --- a/miner.h +++ b/miner.h @@ -968,6 +968,8 @@ struct pool { struct thread_q *getwork_q; pthread_t longpoll_thread; + pthread_t test_thread; + bool testing; int curls; pthread_cond_t cr_cond;