**********************************************************************/
#ifdef CURLRES_ASYNCH
+/*
+ * Cancel all possibly still on-going resolves for this connection.
+ */
+void Curl_async_cancel(struct connectdata *conn)
+{
+ /* If we have a "half" response already received, we first clear that off
+ so that nothing is tempted to use it */
+ if(conn->async.temp_ai) {
+ Curl_freeaddrinfo(conn->async.temp_ai);
+ conn->async.temp_ai = NULL;
+ }
+
+ /* for ares-using, make sure all possible outstanding requests are properly
+ cancelled before we proceed */
+ ares_cancel(conn->data->state.areschannel);
+}
+
+
/*
* Curl_addrinfo_callback() gets called by ares, gethostbyname_thread()
* or getaddrinfo_thread() when we got the name resolved (or not!).
*
* The storage operation locks and unlocks the DNS cache.
*/
-CURLcode Curl_addrinfo_callback(struct connectdata * conn,
+CURLcode Curl_addrinfo_callback(struct connectdata *conn,
int status,
struct Curl_addrinfo *ai)
{
struct SessionHandle;
struct connectdata;
+#ifdef CURLRES_ASYNCH
+void Curl_async_cancel(struct connectdata *conn);
+#else
+#define Curl_async_cancel(x) do {} while(0)
+#endif
+
/*
* Curl_global_host_cache_init() initializes and sets up a global DNS cache.
* Global DNS cache is general badness. Do not use. This will be removed in
data->state.tempwrite = NULL;
}
- /* for ares-using, make sure all possible outstanding requests are properly
- cancelled before we proceed */
- ares_cancel(data->state.areschannel);
-
/* if data->set.reuse_forbid is TRUE, it means the libcurl client has
forced us to close this no matter what we think.