Commit 907520c4 authored by Ray Satiro's avatar Ray Satiro Committed by Daniel Stenberg
Browse files

progress callback: skip last callback update on errors

When an error has been detected, skip the final forced call to the
progress callback by making sure to pass the current return code
variable in the Curl_done() call in the CURLM_STATE_DONE state.

This avoids the "extra" callback that could occur even if you returned
error from the progress callback.

Bug: http://curl.haxx.se/mail/lib-2014-06/0062.html
Reported by: Jonathan Cardoso Machado
parent 1c1d9a3a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1610,7 +1610,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
        Curl_multi_process_pending_handles(multi);

        /* post-transfer command */
        res = Curl_done(&data->easy_conn, CURLE_OK, FALSE);
        res = Curl_done(&data->easy_conn, data->result, FALSE);

        /* allow a previously set error code take precedence */
        if(!data->result)
+2 −2
Original line number Diff line number Diff line
@@ -5796,9 +5796,9 @@ CURLcode Curl_done(struct connectdata **connp,
  if(conn->handler->done)
    result = conn->handler->done(conn, status, premature);
  else
    result = CURLE_OK;
    result = status;

  if(Curl_pgrsDone(conn) && !result)
  if(!result && Curl_pgrsDone(conn))
    result = CURLE_ABORTED_BY_CALLBACK;

  /* if the transfer was completed in a paused state there can be buffered