Commit 9b2cce23 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

- Based on patch provided by Jacob Moshenko, the transfer logic now properly

  makes sure that when using sub-second timeouts, there's no final bad 1000ms
  wait. Previously, a sub-second timeout would often make the elapsed time end
  up the time rounded up to the nearest second (e.g. 1s for 200ms timeout)
parent cd465e4a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -7,6 +7,11 @@
                                  Changelog

Daniel Stenberg (2 Mar 2010)
- Based on patch provided by Jacob Moshenko, the transfer logic now properly
  makes sure that when using sub-second timeouts, there's no final bad 1000ms
  wait. Previously, a sub-second timeout would often make the elapsed time end
  up the time rounded up to the nearest second (e.g. 1s for 200ms timeout)

- Andrei Benea filed bug report #2956698 and pointed out that the
  CURLOPT_CERTINFO feature leaked memory due to a missing OpenSSL function
  call. He provided the patch to fix it too.
+2 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ This release includes the following bugfixes:
 o FTP timeouts after file transferred completely
 o skip poll() on Interix
 o CURLOPT_CERTINFO memory leak
 o sub-second timeouts improvements

This release includes the following known bugs:

@@ -36,6 +37,6 @@ advice from friends like these:

 Steven M. Schweda, Yang Tse, Jack Zhang, Tom Donovan, Martin Hager,
 Daniel Fandrich, Patrick Monnerat, Pat Ray, Wesley Miaw, Ben Greear,
 Ryan Chan, Markus Duft, Andrei Benea
 Ryan Chan, Markus Duft, Andrei Benea, Jacob Moshenko

        Thanks! (and sorry if I forgot to mention someone)
+13 −4
Original line number Diff line number Diff line
@@ -1067,11 +1067,11 @@ CURLcode Curl_readwrite(struct connectdata *conn,
    if(k->size != -1) {
      failf(data, "Operation timed out after %ld milliseconds with %"
            FORMAT_OFF_T " out of %" FORMAT_OFF_T " bytes received",
            data->set.timeout, k->bytecount, k->size);
            Curl_tvdiff(k->now, k->start), k->bytecount, k->size);
    } else {
      failf(data, "Operation timed out after %ld milliseconds with %"
            FORMAT_OFF_T " bytes received",
            data->set.timeout, k->bytecount);
            Curl_tvdiff(k->now, k->start), k->bytecount);
    }
    return CURLE_OPERATION_TIMEDOUT;
  }
@@ -1266,8 +1266,17 @@ Transfer(struct connectdata *conn)
      /* if this is the first lap and one of the file descriptors is fine
         to work with, skip the timeout */
      timeout_ms = 0;
    else {
      if(data->set.timeout) {
        timeout_ms = data->set.timeout - Curl_tvdiff(k->now, k->start);
        if(timeout_ms > 1000)
          timeout_ms = 1000;
        else if(timeout_ms < 0)
          return CURLE_OPERATION_TIMEDOUT;
      }
      else
        timeout_ms = 1000;
    }

    switch (Curl_socket_ready(fd_read, fd_write, timeout_ms)) {
    case -1: /* select() error, stop reading */