diff --git a/lib/highlevel.c b/lib/highlevel.c index add9735b88ffc1fa62e63ddaf71e3f38ba62072a..7a9dad308b01cdec7d1e104bd650692dab7759a4 100644 --- a/lib/highlevel.c +++ b/lib/highlevel.c @@ -174,6 +174,7 @@ _Transfer(struct connectdata *c_conn) #define KEEP_WRITE 2 pgrsTime(data, TIMER_PRETRANSFER); + speedinit(data); if (!conn->getheader) { header = FALSE; diff --git a/lib/speedcheck.c b/lib/speedcheck.c index 125f077ac646ae380f70a0c508780e169613d881..d3d33e5627d3c5e647e48971d07a8e0c889f2fe3 100644 --- a/lib/speedcheck.c +++ b/lib/speedcheck.c @@ -50,21 +50,24 @@ #include "sendf.h" #include "speedcheck.h" +void speedinit(struct UrlData *data) +{ + memset(&data->keeps_speed, 0, sizeof(struct timeval)); +} + CURLcode speedcheck(struct UrlData *data, struct timeval now) { - static struct timeval keeps_speed; - - if((data->current_speed >= 0) && + if((data->progress.current_speed >= 0) && data->low_speed_time && - (tvlong(keeps_speed) != 0) && - (data->current_speed < data->low_speed_limit)) { + (tvlong(data->keeps_speed) != 0) && + (data->progress.current_speed < data->low_speed_limit)) { /* We are now below the "low speed limit". If we are below it for "low speed time" seconds we consider that enough reason to abort the download. */ - if( tvdiff(now, keeps_speed) > data->low_speed_time) { + if( tvdiff(now, data->keeps_speed) > data->low_speed_time) { /* we have been this slow for long enough, now die */ failf(data, "Operation too slow. " @@ -76,7 +79,7 @@ CURLcode speedcheck(struct UrlData *data, } else { /* we keep up the required speed all right */ - keeps_speed = now; + data->keeps_speed = now; } return CURLE_OK; } diff --git a/lib/speedcheck.h b/lib/speedcheck.h index eb037d508e8e37860097eca6cfce27ba297f2f7d..2ecef302c6d6c452d4a3bb2fa4a9bc80fa09bcae 100644 --- a/lib/speedcheck.h +++ b/lib/speedcheck.h @@ -44,6 +44,7 @@ #include "timeval.h" +void speedinit(struct UrlData *data); CURLcode speedcheck(struct UrlData *data, struct timeval now); diff --git a/lib/urldata.h b/lib/urldata.h index e5fcf16ff4bcc4e5688eb94f3c1ee2235f7a00e2..5b5da4d1fc2c7f04c8c814b753513050cee36ea7 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -503,6 +503,8 @@ struct UrlData { #ifdef KRB4 FILE *cmdchannel; #endif + + struct timeval keeps_speed; /* this should be request-specific */ }; #define LIBCURL_NAME "libcurl"