]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
multi: free up more data earleier in DONE
authorDaniel Stenberg <daniel@haxx.se>
Sat, 15 Apr 2023 19:11:36 +0000 (21:11 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 15 Apr 2023 21:30:05 +0000 (23:30 +0200)
Before checking for more users of the connection and possibly bailing
out.

Fixes #10971
Reported-by: Paweł Wegner
Closes #10972

lib/multi.c

index b2b1d65a38181711fbd17f55e7fc03a4c392a1cf..0be8d0c407be4a7286b19188d34b28f090332606 100644 (file)
@@ -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