moved the protocol-specific free to allow easier multiple transfers
authorDaniel Stenberg <daniel@haxx.se>
Tue, 13 Feb 2001 13:34:16 +0000 (13:34 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 13 Feb 2001 13:34:16 +0000 (13:34 +0000)
lib/ftp.c
lib/http.c
lib/url.c

index c6f8b61..6ec17c1 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -545,9 +545,6 @@ CURLcode Curl_ftp_done(struct connectdata *conn)
     }
   }
 
-  free(ftp);
-  data->proto.ftp=NULL; /* it is gone */
-
   return CURLE_OK;
 }
 
index 54623ec..93ae049 100644 (file)
@@ -375,9 +375,6 @@ CURLcode Curl_http_done(struct connectdata *conn)
     *bytecount = http->readbytecount + http->writebytecount;
   }
 
-  free(http);
-  data->proto.http=NULL; /* it is gone */
-
   return CURLE_OK;
 }
 
index 2348ac2..7fe2fc1 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -561,6 +561,10 @@ CURLcode curl_disconnect(CURLconnect *c_connect)
 
   struct UrlData *data = conn->data;
 
+  if(data->proto.generic)
+    free(data->proto.generic);
+  data->proto.generic=NULL; /* it is gone */
+
 #ifdef ENABLE_IPV6
   if(conn->res) /* host name info */
     freeaddrinfo(conn->res);
@@ -1644,7 +1648,13 @@ CURLcode curl_do(CURLconnect *in_conn)
   if(!conn || (conn->handle!= STRUCT_CONNECT)) {
     return CURLE_BAD_FUNCTION_ARGUMENT;
   }
-  if(conn->state != CONN_INIT) {
+  switch(conn->state) {
+  case CONN_INIT:
+  case CONN_DONE:
+    /* these two states are OK */
+    break;
+  default:
+    /* anything else is bad */
     return CURLE_BAD_CALLING_ORDER;
   }