From b5881d1fbd544576ec876c4374c8f71240965cdc Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 7 Dec 2017 09:29:58 +0100 Subject: curl: limit -# update frequency for unknown total size Make it use a max 10Hz update frequency for this case as well. Return early if the "point" hasn't moved since last invoke. Reported-by: Elliot Saba Fixes #2158 Closes #2163 --- src/tool_cb_prg.c | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) (limited to 'src/tool_cb_prg.c') diff --git a/src/tool_cb_prg.c b/src/tool_cb_prg.c index 992b96d97..403de03a9 100644 --- a/src/tool_cb_prg.c +++ b/src/tool_cb_prg.c @@ -61,14 +61,27 @@ int tool_progress_cb(void *clientp, /* we've come this far */ point = dlnow + ulnow + bar->initial_size; - if(bar->calls && (tvdiff(now, bar->prevtime) < 100L) && point < total) - /* after first call, limit progress-bar updating to 10 Hz */ - /* update when we're at 100% even if last update is less than 200ms ago */ - return 0; - - if(point > total) - /* we have got more than the expected total! */ - total = point; + if(bar->calls) { + /* after first call... */ + if(total) { + /* we know the total data to get... */ + if(bar->prev == point) + /* progress didn't change since last invoke */ + return 0; + else if((tvdiff(now, bar->prevtime) < 100L) && point < total) + /* limit progress-bar updating to 10 Hz except when we're at 100% */ + return 0; + } + else { + /* total is unknown */ + if(bar->prev/1024 == point/1024) + /* the same kilobyte level as last invoke */ + return 0; + else if(tvdiff(now, bar->prevtime) < 100L) + /* limit progress-bar updating to 10 Hz */ + return 0; + } + } /* simply count invokes */ bar->calls++; @@ -82,6 +95,10 @@ int tool_progress_cb(void *clientp, } } else if(point != bar->prev) { + if(point > total) + /* we have got more than the expected total! */ + total = point; + frac = (double)point / (double)total; percent = frac * 100.0; barwidth = bar->width - 7; -- cgit v1.2.3