Commit 51009a40 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

make sure the code deals with failures on the DO_MORE state properly

parent 2ec8f77f
Loading
Loading
Loading
Loading
+30 −25
Original line number Diff line number Diff line
@@ -1057,7 +1057,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
      /* protocol-specific connect phase */
      easy->result = Curl_protocol_connecting(easy->easy_conn,
                                              &protocol_connect);
      if(protocol_connect) {
      if((easy->result == CURLE_OK) && protocol_connect) {
        /* after the connect has completed, go WAITDO */
        multistate(easy, CURLM_STATE_WAITDO);
        result = CURLM_CALL_MULTI_PERFORM;
@@ -1181,15 +1181,20 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,

        if(CURLE_OK == easy->result)
          easy->result = Curl_readwrite_init(easy->easy_conn);
        else
          /* Remove ourselves from the send pipeline */
          Curl_removeHandleFromPipeline(easy->easy_handle,
                                        easy->easy_conn->send_pipe);

        /* No need to remove ourselves from the send pipeline here since that
           is done for us in Curl_done() */

        if(CURLE_OK == easy->result) {
          multistate(easy, CURLM_STATE_DO_DONE);
          result = CURLM_CALL_MULTI_PERFORM;
        }
        else {
          /* failure detected */
          Curl_posttransfer(easy->easy_handle);
          Curl_done(&easy->easy_conn, easy->result, FALSE);
          disconnect_conn = TRUE;
        }
      }
      break;