ftp.c: fix some leaks torture tests detected 2011-08-30 - follow-up
authorYang Tse <yangsita@gmail.com>
Thu, 1 Sep 2011 13:38:30 +0000 (15:38 +0200)
committerYang Tse <yangsita@gmail.com>
Thu, 1 Sep 2011 13:38:30 +0000 (15:38 +0200)
follow-up for commit d20408e8

lib/ftp.c

index a6362b2..18fa8cf 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -964,6 +964,13 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
     conn->bits.ftp_use_eprt = TRUE;
 #endif
 
+  /* we set the secondary socket variable to this for now, it is only so that
+     the cleanup function will close it in case we fail before the true
+     secondary stuff is made */
+  if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET])
+    Curl_closesocket(conn, conn->sock[SECONDARYSOCKET]);
+  conn->sock[SECONDARYSOCKET] = portsock;
+
   for(; fcmd != DONE; fcmd++) {
 
     if(!conn->bits.ftp_use_eprt && (EPRT == fcmd))
@@ -999,10 +1006,8 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
       result = Curl_pp_sendf(&ftpc->pp, "%s |%d|%s|%hu|", mode[fcmd],
                              sa->sa_family == AF_INET?1:2,
                              myhost, port);
-      if(result) {
-        Curl_closesocket(conn, portsock);
+      if(result)
         return result;
-      }
       break;
     }
     else if(PORT == fcmd) {
@@ -1022,10 +1027,8 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
       snprintf(dest, 20, ",%d,%d", (int)(port>>8), (int)(port&0xff));
 
       result = Curl_pp_sendf(&ftpc->pp, "%s %s", mode[fcmd], tmp);
-      if(result) {
-        Curl_closesocket(conn, portsock);
+      if(result)
         return result;
-      }
       break;
     }
   }
@@ -1033,13 +1036,6 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
   /* store which command was sent */
   ftpc->count1 = fcmd;
 
-  /* we set the secondary socket variable to this for now, it is only so that
-     the cleanup function will close it in case we fail before the true
-     secondary stuff is made */
-  if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET])
-    Curl_closesocket(conn, conn->sock[SECONDARYSOCKET]);
-  conn->sock[SECONDARYSOCKET] = portsock;
-
   /* this tcpconnect assignment below is a hackish work-around to make the
      multi interface with active FTP work - as it will not wait for a
      (passive) connect in Curl_is_connected().