]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
tool_progress: Fix progress meter in parallel mode
authorCherish98 <66007047+Cherish98@users.noreply.github.com>
Fri, 2 Apr 2021 10:57:38 +0000 (10:57 +0000)
committerJay Satiro <raysatiro@yahoo.com>
Tue, 6 Apr 2021 03:43:26 +0000 (23:43 -0400)
Make sure the total amount of DL/UL bytes are counted before the
transfer finalizes. Otherwise if a transfer finishes too quick, its
total numbers are not added, and results in a DL%/UL% that goes above
100%.

Detail:

progress_meter() is called periodically, and it may not catch a
transfer's total bytes if the value was unknown during the last call,
and the transfer is finished and deleted (i.e., lost) during the next
call.

Closes https://github.com/curl/curl/pull/6840

src/tool_progress.c

index 7db6df9090a5d6f72a1efd31fa90837163913e38..da6c2bc6f6e35a2f5e59ac85e8bc7adb677ec77e 100644 (file)
@@ -318,4 +318,12 @@ void progress_finalize(struct per_transfer *per)
   /* get the numbers before this transfer goes away */
   all_dlalready += per->dlnow;
   all_ulalready += per->ulnow;
+  if(!per->dltotal_added) {
+    all_dltotal += per->dltotal;
+    per->dltotal_added = TRUE;
+  }
+  if(!per->ultotal_added) {
+    all_ultotal += per->ultotal;
+    per->ultotal_added = TRUE;
+  }
 }