mirror of
https://github.com/curl/curl.git
synced 2026-07-27 02:27:16 +03:00
curl_multi_remove_handle() don't block terminating c-ares requests
Added Curl_resolver_kill() for all three resolver modes, which only blocks when necessary, along with test 1592 to confirm curl_multi_remove_handle() doesn't block unless it must. Closes #3428 Fixes #3371
This commit is contained in:
parent
ebe658c1e5
commit
84a30d0a41
8 changed files with 225 additions and 21 deletions
|
|
@ -537,10 +537,8 @@ static CURLcode multi_done(struct connectdata **connp,
|
|||
/* Stop if multi_done() has already been called */
|
||||
return CURLE_OK;
|
||||
|
||||
if(data->mstate == CURLM_STATE_WAITRESOLVE) {
|
||||
/* still waiting for the resolve to complete */
|
||||
(void)Curl_resolver_wait_resolv(conn, NULL);
|
||||
}
|
||||
/* Stop the resolver and free its own resources (but not dns_entry yet). */
|
||||
Curl_resolver_kill(conn);
|
||||
|
||||
Curl_getoff_all_pipelines(data, conn);
|
||||
|
||||
|
|
@ -587,7 +585,6 @@ static CURLcode multi_done(struct connectdata **connp,
|
|||
}
|
||||
|
||||
data->state.done = TRUE; /* called just now! */
|
||||
Curl_resolver_cancel(conn);
|
||||
|
||||
if(conn->dns_entry) {
|
||||
Curl_resolv_unlock(data, conn->dns_entry); /* done with this */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue