From 56493eea1cb4bee86c177c427df71b66bf72cbcb Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sat, 20 Jul 2024 00:44:27 +0200 Subject: [PATCH] multi: do a final progress update on connect failure To fix timing metric etc Co-authored-by: Justin Maggard Fixes #14204 Closes #14239 --- lib/multi.c | 1 + lib/progress.c | 20 +++++++++++++++++--- lib/progress.h | 2 ++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/multi.c b/lib/multi.c index 521af63b90..c09503efc1 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -2643,6 +2643,7 @@ statemachine_end: else if(data->mstate == MSTATE_CONNECT) { /* Curl_connect() failed */ (void)Curl_posttransfer(data); + Curl_pgrsUpdate_nometer(data); } multistate(data, MSTATE_COMPLETED); diff --git a/lib/progress.c b/lib/progress.c index 0f747b122c..34c29a2701 100644 --- a/lib/progress.c +++ b/lib/progress.c @@ -587,10 +587,8 @@ static void progress_meter(struct Curl_easy *data) * Curl_pgrsUpdate() returns 0 for success or the value returned by the * progress callback! */ -int Curl_pgrsUpdate(struct Curl_easy *data) +static int pgrsupdate(struct Curl_easy *data, bool showprogress) { - struct curltime now = Curl_now(); /* what time is it */ - bool showprogress = progress_calc(data, now); if(!(data->progress.flags & PGRS_HIDE)) { if(data->set.fxferinfo) { int result; @@ -631,3 +629,19 @@ int Curl_pgrsUpdate(struct Curl_easy *data) return 0; } + +int Curl_pgrsUpdate(struct Curl_easy *data) +{ + struct curltime now = Curl_now(); /* what time is it */ + bool showprogress = progress_calc(data, now); + return pgrsupdate(data, showprogress); +} + +/* + * Update all progress, do not do progress meter/callbacks. + */ +void Curl_pgrsUpdate_nometer(struct Curl_easy *data) +{ + struct curltime now = Curl_now(); /* what time is it */ + (void)progress_calc(data, now); +} diff --git a/lib/progress.h b/lib/progress.h index 73749419ad..860257425b 100644 --- a/lib/progress.h +++ b/lib/progress.h @@ -54,6 +54,8 @@ CURLcode Curl_pgrsSetDownloadCounter(struct Curl_easy *data, curl_off_t size); void Curl_pgrsSetUploadCounter(struct Curl_easy *data, curl_off_t size); void Curl_ratelimit(struct Curl_easy *data, struct curltime now); int Curl_pgrsUpdate(struct Curl_easy *data); +void Curl_pgrsUpdate_nometer(struct Curl_easy *data); + void Curl_pgrsResetTransferSizes(struct Curl_easy *data); struct curltime Curl_pgrsTime(struct Curl_easy *data, timerid timer); timediff_t Curl_pgrsLimitWaitTime(curl_off_t cursize, -- 2.47.3