Commit 07ae6172cc98da0345aa2dfa524dfdb93b6a63d2

Con Kolivas 2013-03-07T14:15:28

Close any sockets opened if we fail to initiate stratum but have opened the socket.

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)