Browse Source

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

Con Kolivas 13 years ago
parent
commit
07ae6172cc
1 changed files with 13 additions and 10 deletions
  1. 13 10
      util.c

+ 13 - 10
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)