1
0
mirror of https://github.com/GOSTSec/sgminer synced 2025-02-02 01:44:23 +00:00

Suspend stratum connections to backup pools when there is no requirement to potentially grab work from them.

This commit is contained in:
Con Kolivas 2012-12-03 09:52:46 +11:00
parent 16637ac91e
commit fc5d3a0eaf
3 changed files with 47 additions and 0 deletions

View File

@ -4676,6 +4676,28 @@ static void clear_stratum_shares(struct pool *pool)
}
}
/* We only need to maintain a secondary pool connection when we need the
* capacity to get work from the backup pools while still on the primary */
static bool cnx_needed(struct pool *pool)
{
struct pool *cp;
if (pool_strategy == POOL_BALANCE)
return true;
if (pool_strategy == POOL_LOADBALANCE)
return true;
if (opt_fail_only)
return true;
cp = current_pool();
if (cp == pool)
return true;
if (!cp->has_gbt && !cp->has_stratum)
return true;
return false;
}
static void wait_lpcurrent(struct pool *pool);
/* One stratum thread per pool that has stratum waits on the socket checking
* for new messages and for the integrity of the socket connection. We reset
* the connection based on the integrity of the receive side only as the send
@ -4696,6 +4718,22 @@ static void *stratum_thread(void *userdata)
if (unlikely(pool->removed))
break;
/* Check to see whether we need to maintain this connection
* indefinitely or just bring it up when we switch to this
* pool */
if (!cnx_needed(pool)) {
suspend_stratum(pool);
wait_lpcurrent(pool);
if (!initiate_stratum(pool) || !auth_stratum(pool)) {
pool_died(pool);
while (!initiate_stratum(pool) || !auth_stratum(pool)) {
if (pool->removed)
goto out;
sleep(30);
}
}
}
FD_ZERO(&rd);
FD_SET(pool->sock, &rd);
timeout.tv_sec = 90;

8
util.c
View File

@ -1435,6 +1435,14 @@ out:
return ret;
}
void suspend_stratum(struct pool *pool)
{
applog(LOG_INFO, "Closing socket for stratum pool %d", pool->pool_no);
mutex_lock(&pool->stratum_lock);
pool->stratum_active = false;
mutex_unlock(&pool->stratum_lock);
CLOSESOCKET(pool->sock);
}
void dev_error(struct cgpu_info *dev, enum dev_reason reason)
{

1
util.h
View File

@ -51,6 +51,7 @@ bool parse_method(struct pool *pool, char *s);
bool extract_sockaddr(struct pool *pool, char *url);
bool auth_stratum(struct pool *pool);
bool initiate_stratum(struct pool *pool);
void suspend_stratum(struct pool *pool);
void dev_error(struct cgpu_info *dev, enum dev_reason reason);
void *realloc_strcat(char *ptr, char *s);
void RenameThread(const char* name);