From: Daniel Stenberg Date: Sat, 15 Apr 2023 19:11:36 +0000 (+0200) Subject: multi: free up more data earleier in DONE X-Git-Tag: curl-8_1_0~136 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=81b2b577df40262716ff0e1c0e1cebabb99f012d;p=thirdparty%2Fcurl.git multi: free up more data earleier in DONE Before checking for more users of the connection and possibly bailing out. Fixes #10971 Reported-by: Paweł Wegner Closes #10972 --- diff --git a/lib/multi.c b/lib/multi.c index b2b1d65a38..0be8d0c407 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -699,6 +699,15 @@ static CURLcode multi_done(struct Curl_easy *data, process_pending_handles(data->multi); /* connection / multiplex */ + Curl_safefree(data->state.ulbuf); + + /* if the transfer was completed in a paused state there can be buffered + data left to free */ + for(i = 0; i < data->state.tempcount; i++) { + Curl_dyn_free(&data->state.tempwrite[i].b); + } + data->state.tempcount = 0; + CONNCACHE_LOCK(data); Curl_detach_connection(data); if(CONN_INUSE(conn)) { @@ -717,14 +726,6 @@ static CURLcode multi_done(struct Curl_easy *data, conn->dns_entry = NULL; } Curl_hostcache_prune(data); - Curl_safefree(data->state.ulbuf); - - /* if the transfer was completed in a paused state there can be buffered - data left to free */ - for(i = 0; i < data->state.tempcount; i++) { - Curl_dyn_free(&data->state.tempwrite[i].b); - } - data->state.tempcount = 0; /* if data->set.reuse_forbid is TRUE, it means the libcurl client has forced us to close this connection. This is ignored for requests taking