]> granicus.if.org Git - curl/commitdiff
hostthre.c: destroy_thread_data() made public. Called
authorGisle Vanem <gvanem@broadpark.no>
Mon, 4 Apr 2005 12:30:03 +0000 (12:30 +0000)
committerGisle Vanem <gvanem@broadpark.no>
Mon, 4 Apr 2005 12:30:03 +0000 (12:30 +0000)
from url.c: Curl_disconnect().

lib/hostip.h
lib/hostthre.c
lib/url.c

index 0b06bae6a4158b4150b7dd2f2499b635e6e08b4f..16a607abff782668164dc74f4b26a025f2d37832 100644 (file)
@@ -240,6 +240,12 @@ struct Curl_dns_entry *
 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
index 022d8b47bde69c8180b0111c0d73679b0e63c587..b05729404a5f84c8ac547e49f3400aae60520d87 100644 (file)
@@ -301,10 +301,10 @@ static unsigned __stdcall getaddrinfo_thread (void *arg)
 #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);
@@ -319,6 +319,7 @@ static void destroy_thread_data (struct Curl_async *async)
     /* destroy the synchronization objects */
     if (td->mutex_waiting)
       CloseHandle(td->mutex_waiting);
+    td->mutex_waiting = NULL;
     if (td->event_resolved)
       CloseHandle(td->event_resolved);
 
@@ -365,7 +366,7 @@ static bool init_resolve_thread (struct connectdata *conn,
    */
   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;
   }
@@ -375,7 +376,7 @@ static bool init_resolve_thread (struct connectdata *conn,
    */
   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;
   }
@@ -401,7 +402,7 @@ static bool init_resolve_thread (struct connectdata *conn,
   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;
@@ -508,7 +509,7 @@ CURLcode Curl_wait_for_resolv(struct connectdata *conn,
       rc = CURLE_OPERATION_TIMEDOUT;
   }
 
-  destroy_thread_data(&conn->async);
+  Curl_destroy_thread_data(&conn->async);
 
   if(!conn->async.dns)
     conn->bits.close = TRUE;
@@ -528,7 +529,7 @@ CURLcode Curl_is_resolved(struct connectdata *conn,
 
   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;
index e3e24a5ce9fcfca57b62b6584bd49004d2b43c30..9d62f429035e3682c63238dfbfbffb2ea7341dce 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -1503,11 +1503,12 @@ CURLcode Curl_disconnect(struct connectdata *conn)
   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);