tool_progress: Fix progress meter in parallel mode

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
This commit is contained in:
Cherish98 2021-04-02 10:57:38 +00:00 committed by Jay Satiro
parent c1abc6624d
commit 4b4401e26a
1 changed files with 8 additions and 0 deletions

View 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;
}
}