mirror of
https://github.com/curl/curl.git
synced 2024-12-15 06:40:09 +08:00
url: don't touch the multi handle when closing internal handles
Reported-by: Maksymilian Arciemowicz Closes #12165
This commit is contained in:
parent
d31a8424e8
commit
b0bee93dfe
@ -373,7 +373,7 @@ struct Curl_addrinfo *Curl_doh(struct Curl_easy *data,
|
||||
int slot;
|
||||
struct dohdata *dohp;
|
||||
struct connectdata *conn = data->conn;
|
||||
*waitp = TRUE; /* this never returns synchronously */
|
||||
*waitp = FALSE;
|
||||
(void)hostname;
|
||||
(void)port;
|
||||
|
||||
@ -413,12 +413,14 @@ struct Curl_addrinfo *Curl_doh(struct Curl_easy *data,
|
||||
dohp->pending++;
|
||||
}
|
||||
#endif
|
||||
*waitp = TRUE; /* this never returns synchronously */
|
||||
return NULL;
|
||||
|
||||
error:
|
||||
curl_slist_free_all(dohp->headers);
|
||||
data->req.doh->headers = NULL;
|
||||
for(slot = 0; slot < DOH_PROBE_SLOTS; slot++) {
|
||||
(void)curl_multi_remove_handle(data->multi, dohp->probe[slot].easy);
|
||||
Curl_close(&dohp->probe[slot].easy);
|
||||
}
|
||||
Curl_safefree(data->req.doh);
|
||||
|
20
lib/url.c
20
lib/url.c
@ -363,16 +363,18 @@ CURLcode Curl_close(struct Curl_easy **datap)
|
||||
/* Detach connection if any is left. This should not be normal, but can be
|
||||
the case for example with CONNECT_ONLY + recv/send (test 556) */
|
||||
Curl_detach_connection(data);
|
||||
if(data->multi)
|
||||
/* This handle is still part of a multi handle, take care of this first
|
||||
and detach this handle from there. */
|
||||
curl_multi_remove_handle(data->multi, data);
|
||||
if(!data->internal) {
|
||||
if(data->multi)
|
||||
/* This handle is still part of a multi handle, take care of this first
|
||||
and detach this handle from there. */
|
||||
curl_multi_remove_handle(data->multi, data);
|
||||
|
||||
if(data->multi_easy) {
|
||||
/* when curl_easy_perform() is used, it creates its own multi handle to
|
||||
use and this is the one */
|
||||
curl_multi_cleanup(data->multi_easy);
|
||||
data->multi_easy = NULL;
|
||||
if(data->multi_easy) {
|
||||
/* when curl_easy_perform() is used, it creates its own multi handle to
|
||||
use and this is the one */
|
||||
curl_multi_cleanup(data->multi_easy);
|
||||
data->multi_easy = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
data->magic = 0; /* force a clear AFTER the possibly enforced removal from
|
||||
|
Loading…
Reference in New Issue
Block a user