diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/progress.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/lib/progress.c b/lib/progress.c index 571879b8a..9e53f4b99 100644 --- a/lib/progress.c +++ b/lib/progress.c @@ -187,6 +187,7 @@ int Curl_pgrsUpdate(struct connectdata *conn) double total_transfer; double total_expected_transfer; + double timespent; struct SessionHandle *data = conn->data; @@ -224,17 +225,17 @@ int Curl_pgrsUpdate(struct connectdata *conn) now = Curl_tvnow(); /* what time is it */ /* The exact time spent so far (from the start) */ - data->progress.timespent = Curl_tvdiff (now, data->progress.start)/1000; + timespent = (double)Curl_tvdiff (now, data->progress.start)/1000; + + data->progress.timespent = (long)timespent; /* The average download speed this far */ data->progress.dlspeed = - data->progress.downloaded/(data->progress.timespent? - data->progress.timespent:1); + data->progress.downloaded/(timespent>0.01?timespent:1); /* The average upload speed this far */ data->progress.ulspeed = - data->progress.uploaded/(data->progress.timespent? - data->progress.timespent:1); + data->progress.uploaded/(timespent>0.01?timespent:1); if(data->progress.lastshow == Curl_tvlong(now)) return 0; /* never update this more than once a second if the end isn't @@ -281,8 +282,10 @@ int Curl_pgrsUpdate(struct connectdata *conn) data->progress.speeder[checkindex])/((double)span_ms/1000); } else - /* the first second we only have one speed information to use */ - data->progress.current_speed = data->progress.speeder[nowindex]; + /* the first second we use the main average */ + data->progress.current_speed = + (data->progress.ulspeed>data->progress.dlspeed)? + data->progress.ulspeed:data->progress.dlspeed; if(data->progress.flags & PGRS_HIDE) return 0; |