Commit 465753c2 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

When following to a new URL, we must make sure to call Curl_done() first,

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.
parent e40392ac
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -331,6 +331,8 @@ CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
        char *gotourl;
        Curl_posttransfer(easy->easy_handle);

        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);
@@ -339,6 +341,7 @@ CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
          else
            free(gotourl);
        }
      }
    
      easy->easy_handle->change.url_changed = FALSE;

@@ -503,6 +506,8 @@ 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_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;