From 50dd05a55249c42b6a355cd0982c8e4da808b263 Mon Sep 17 00:00:00 2001 From: Stefan Yohansson Date: Mon, 10 Aug 2020 13:16:37 +0100 Subject: [PATCH] transfer: move retrycount from connect struct to easy handle This flag was applied to the connection struct that is released on retry. These changes move the retry counter into Curl_easy struct that lives across retries and retains the new connection. Reported-by: Cherish98 on github Fixes #5794 Closes #5800 --- lib/transfer.c | 6 ++++-- lib/urldata.h | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/transfer.c b/lib/transfer.c index 161dcfa01c..a07c7af8ce 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -1804,12 +1804,14 @@ CURLcode Curl_retry_request(struct connectdata *conn, } if(retry) { #define CONN_MAX_RETRIES 5 - if(conn->retrycount++ >= CONN_MAX_RETRIES) { + if(data->state.retrycount++ >= CONN_MAX_RETRIES) { failf(data, "Connection died, tried %d times before giving up", CONN_MAX_RETRIES); + data->state.retrycount = 0; return CURLE_SEND_ERROR; } - infof(conn->data, "Connection died, retrying a fresh connect\n"); + infof(conn->data, "Connection died, retrying a fresh connect\ +(retry count: %d)\n", data->state.retrycount); *url = strdup(conn->data->change.url); if(!*url) return CURLE_OUT_OF_MEMORY; diff --git a/lib/urldata.h b/lib/urldata.h index 332ffb3929..8ddb580c89 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -1090,7 +1090,6 @@ struct connectdata { struct http_connect_state *connect_state; /* for HTTP CONNECT */ struct connectbundle *bundle; /* The bundle we are member of */ int negnpn; /* APLN or NPN TLS negotiated protocol, CURL_HTTP_VERSION* */ - int retrycount; /* number of retries on a new connection */ #ifdef USE_UNIX_SOCKETS char *unix_domain_socket; #endif @@ -1296,6 +1295,8 @@ struct UrlState { /* Points to the connection cache */ struct conncache *conn_cache; + int retrycount; /* number of retries on a new connection */ + /* buffers to store authentication data in, as parsed from input options */ struct curltime keeps_speed; /* for the progress meter really */ -- 2.47.3