From 07ae6172cc98da0345aa2dfa524dfdb93b6a63d2 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Thu, 7 Mar 2013 14:15:28 +1100 Subject: [PATCH] Close any sockets opened if we fail to initiate stratum but have opened the socket. --- util.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/util.c b/util.c index 9bde6e36..e1cd2b77 100644 --- a/util.c +++ b/util.c @@ -1504,10 +1504,19 @@ 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); +} + bool initiate_stratum(struct pool *pool) { + bool ret = false, recvd = false, noresume = false, sockd = false; char s[RBUFSIZE], *sret = NULL, *nonce1, *sessionid; - bool ret = false, recvd = false, noresume = false; json_t *val = NULL, *res_val, *err_val; json_error_t err; int n2size; @@ -1515,6 +1524,7 @@ bool initiate_stratum(struct pool *pool) if (!setup_stratum_curl(pool)) goto out; + sockd = true; resend: if (!recvd) { if (pool->sessionid) @@ -1622,20 +1632,13 @@ out: goto resend; } applog(LOG_DEBUG, "Initiate stratum failed"); + if (sockd) + suspend_stratum(pool); } 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); -} - bool restart_stratum(struct pool *pool) { if (pool->stratum_active)