]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
done: make sure the final progress update is made
authorDaniel Stenberg <daniel@haxx.se>
Tue, 24 Nov 2015 18:51:59 +0000 (19:51 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 24 Nov 2015 19:49:04 +0000 (20:49 +0100)
It would previously be skipped if an existing error was returned, but
would lead to a previous value being left there and later used.
CURLINFO_TOTAL_TIME for example.

Still it avoids that final progress update if we reached DONE as the
result of a callback abort to avoid another callback to be called after
an abort-by-callback.

Reported-by: Lukas Ruzicka
Closes #538

lib/url.c

index feb4517fcf3680b7f0c36fbbbca53a727a77bb38..13e95f42c902ff73546ede74c42dded8a474aedd 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -6088,8 +6088,13 @@ CURLcode Curl_done(struct connectdata **connp,
   else
     result = status;
 
-  if(!result && Curl_pgrsDone(conn))
-    result = CURLE_ABORTED_BY_CALLBACK;
+  if(CURLE_ABORTED_BY_CALLBACK != result) {
+    /* avoid this if we already aborted by callback to avoid this calling
+       another callback */
+    CURLcode rc = Curl_pgrsDone(conn);
+    if(!result && rc)
+      result = CURLE_ABORTED_BY_CALLBACK;
+  }
 
   if((conn->send_pipe->size + conn->recv_pipe->size != 0 &&
       !data->set.reuse_forbid &&