From 40c349ada92865faadd0de92fa5dc0d50ba67eb3 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 24 Nov 2015 19:51:59 +0100 Subject: done: make sure the final progress update is made 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 | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/url.c b/lib/url.c index feb4517fc..13e95f42c 100644 --- 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 && -- cgit v1.2.3