Curl_cache_addr(struct SessionHandle *data, Curl_addrinfo *addr,
char *hostname, int port);
+/*
+ * Curl_destroy_thread_data() cleans up async resolver data.
+ * Complementary of ares_destroy.
+ */
+void Curl_destroy_thread_data(struct Curl_async *async);
+
#ifndef INADDR_NONE
#define CURL_INADDR_NONE (in_addr_t) ~0
#else
#endif
/*
- * destroy_thread_data() cleans up async resolver data.
+ * Curl_destroy_thread_data() cleans up async resolver data.
* Complementary of ares_destroy.
*/
-static void destroy_thread_data (struct Curl_async *async)
+void Curl_destroy_thread_data (struct Curl_async *async)
{
if (async->hostname)
free(async->hostname);
/* destroy the synchronization objects */
if (td->mutex_waiting)
CloseHandle(td->mutex_waiting);
+ td->mutex_waiting = NULL;
if (td->event_resolved)
CloseHandle(td->event_resolved);
*/
td->mutex_waiting = CreateMutex(NULL, TRUE, NULL);
if (td->mutex_waiting == NULL) {
- destroy_thread_data(&conn->async);
+ Curl_destroy_thread_data(&conn->async);
SetLastError(EAGAIN);
return FALSE;
}
*/
td->event_resolved = CreateEvent(NULL, TRUE, FALSE, NULL);
if (td->event_resolved == NULL) {
- destroy_thread_data(&conn->async);
+ Curl_destroy_thread_data(&conn->async);
SetLastError(EAGAIN);
return FALSE;
}
if (!td->thread_hnd) {
SetLastError(errno);
TRACE(("_beginthreadex() failed; %s\n", Curl_strerror(conn,errno)));
- destroy_thread_data(&conn->async);
+ Curl_destroy_thread_data(&conn->async);
return FALSE;
}
/* This socket is only to keep Curl_resolv_fdset() and select() happy;
rc = CURLE_OPERATION_TIMEDOUT;
}
- destroy_thread_data(&conn->async);
+ Curl_destroy_thread_data(&conn->async);
if(!conn->async.dns)
conn->bits.close = TRUE;
if (conn->async.done) {
/* we're done */
- destroy_thread_data(&conn->async);
+ Curl_destroy_thread_data(&conn->async);
if (!conn->async.dns) {
TRACE(("Curl_is_resolved(): CURLE_COULDNT_RESOLVE_HOST\n"));
return CURLE_COULDNT_RESOLVE_HOST;
Curl_safefree(conn->allocptr.cookiehost);
Curl_safefree(conn->ip_addr_str);
-#if defined(USE_ARES) || defined(USE_THREADING_GETHOSTBYNAME) || \
- defined(USE_THREADING_GETADDRINFO)
- /* possible left-overs from the async name resolve */
+ /* possible left-overs from the async name resolvers */
+#if defined(USE_ARES)
Curl_safefree(conn->async.hostname);
Curl_safefree(conn->async.os_specific);
+#elif defined(CURLRES_THREADED)
+ Curl_destroy_thread_data(&conn->async);
#endif
Curl_free_ssl_config(&conn->ssl_config);