]> granicus.if.org Git - curl/commitdiff
When following to a new URL, we must make sure to call Curl_done() first,
authorDaniel Stenberg <daniel@haxx.se>
Thu, 4 Mar 2004 16:13:33 +0000 (16:13 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 4 Mar 2004 16:13:33 +0000 (16:13 +0000)
since the current connection must be taken care of properly before we move
on. Christopher R. Palmer reported a problem he found due to this mistake.

lib/multi.c

index 926506b8a569fe1411e97e420d712d4475c0d598..83e0b1d8cadc348fd74ccafac7ac0af2f6036ca7 100644 (file)
@@ -331,13 +331,16 @@ CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
         char *gotourl;
         Curl_posttransfer(easy->easy_handle);
 
-        gotourl = strdup(easy->easy_handle->change.url);
-        easy->easy_handle->change.url_changed = FALSE;
-        easy->result = Curl_follow(easy->easy_handle, gotourl);
-        if(CURLE_OK == easy->result)
-          easy->state = CURLM_STATE_CONNECT;
-        else
-          free(gotourl);
+        easy->result = Curl_done(easy->easy_conn);
+        if(CURLE_OK == easy->result) {
+          gotourl = strdup(easy->easy_handle->change.url);
+          easy->easy_handle->change.url_changed = FALSE;
+          easy->result = Curl_follow(easy->easy_handle, gotourl);
+          if(CURLE_OK == easy->result)
+            easy->state = CURLM_STATE_CONNECT;
+          else
+            free(gotourl);
+        }
       }
     
       easy->easy_handle->change.url_changed = FALSE;
@@ -503,7 +506,9 @@ CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
           if(easy->easy_conn->newurl) {
             char *newurl = easy->easy_conn->newurl;
             easy->easy_conn->newurl = NULL;
-            easy->result = Curl_follow(easy->easy_handle, newurl);
+            easy->result = Curl_done(easy->easy_conn);
+            if(easy->result == CURLE_OK)
+              easy->result = Curl_follow(easy->easy_handle, newurl);
             if(CURLE_OK == easy->result) {
               easy->state = CURLM_STATE_CONNECT;
               result = CURLM_CALL_MULTI_PERFORM;