Commit 4e731a01 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Make the Transfer() function return earlier without doing any initializations

for the cases where there's nothing to do in here, like for SFTP directory
listings that already is complete when this function gets called. The init
stuff clears byte counters which isn't really desired.
parent 5cf6a539
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -1801,15 +1801,6 @@ Transfer(struct connectdata *conn)
  struct Curl_transfer_keeper *k = &data->reqdata.keep;
  bool done=FALSE;

  if(!(conn->protocol & (PROT_FILE|PROT_TFTP))) {
    /* Only do this if we are not transferring FILE or TFTP, since those
       transfers are treated differently. They do their entire transfers in
       the DO function and just returns from this. That is ugly indeed.
    */
    Curl_readwrite_init(conn);
    Curl_pre_readwrite(conn);
  }

  if((conn->sockfd == CURL_SOCKET_BAD) &&
     (conn->writesockfd == CURL_SOCKET_BAD))
    /* nothing to read, nothing to write, we're already OK! */
@@ -1819,6 +1810,15 @@ Transfer(struct connectdata *conn)
  if(!conn->bits.getheader && conn->bits.no_body)
    return CURLE_OK;

  if(!(conn->protocol & (PROT_FILE|PROT_TFTP))) {
    /* Only do this if we are not transferring FILE or TFTP, since those
       transfers are treated differently. They do their entire transfers in
       the DO function and just returns from this. That is ugly indeed.
    */
    Curl_readwrite_init(conn);
    Curl_pre_readwrite(conn);
  }

  while(!done) {
    curl_socket_t fd_read;
    curl_socket_t fd_write;