Close any sockets opened if we fail to initiate stratum but have opened the socket.
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 49 50 51 52 53 54 55 56
diff --git a/util.c b/util.c
index 9bde6e3..e1cd2b7 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)