]> granicus.if.org Git - curl/commitdiff
unlock dns cache entries with a function call instead of a variable fiddle
authorDaniel Stenberg <daniel@haxx.se>
Mon, 11 Nov 2002 22:36:00 +0000 (22:36 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 11 Nov 2002 22:36:00 +0000 (22:36 +0000)
lib/connect.c
lib/ftp.c
lib/hostip.h
lib/url.c

index b97c9da90eaa97c7e10a56b51911038446827ac1..d2080c4526f52061d10f17aea1d9d0286ce1f55c 100644 (file)
@@ -249,8 +249,8 @@ static CURLcode bindlocal(struct connectdata *conn,
       if ( h ) {
         Curl_addrinfo *addr = h->addr;
 
-        h->inuse--; /* decrease the use-counter, we don't need it anymore
-                       after this function has returned */
+        Curl_resolv_unlock(h);
+        /* we don't need it anymore after this function has returned */
 
         memset((char *)&sa, 0, sizeof(sa));
 #ifdef ENABLE_IPV6
index 5dd38771db240ae7d3a7eeb0b5d0bd6c70fefd97..270154f9fe8a8cac9eec7942e139badd58260577 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -1215,7 +1215,8 @@ CURLcode ftp_use_port(struct connectdata *conn)
   }
 
   if(h)
-    h->inuse--; /* when we return from here, we can forget about this */
+    /* when we return from here, we can forget about this */
+    Curl_resolv_unlock(h);
 
   if ( h || sa_filled_in) {
     if( (portsock = socket(AF_INET, SOCK_STREAM, 0)) >= 0 ) {
@@ -1479,7 +1480,7 @@ CURLcode ftp_use_pasv(struct connectdata *conn,
                             &conninfo,
                             connected);
 
-  addr->inuse--; /* we're done using this address */
+  Curl_resolv_unlock(addr); /* we're done using this address */
 
   /*
    * When this is used from the multi interface, this might've returned with
index 2593bc343395780031829452bbcbc11c15b6c9bf..78a17e2e8bc662ef8b418a1f2d24add3e93a8497 100644 (file)
@@ -46,10 +46,21 @@ struct Curl_dns_entry {
 #endif
 };
 
+/*
+ * Curl_resolv() returns an entry with the info for the specified host
+ * and port.
+ *
+ * The returned data *MUST* be "unlocked" with Curl_resolv_unlock() after
+ * use, or we'll leak memory!
+ */
+
 struct Curl_dns_entry *Curl_resolv(struct SessionHandle *data,
                                    char *hostname,
                                    int port);
 
+/* unlock a previously resolved dns entry */
+#define Curl_resolv_unlock(dns) dns->inuse--
+
 /* for debugging purposes only: */
 void Curl_scan_cache_used(void *user, void *ptr);
 
index 0274cb0f9cebb894e066154e0cb2b686dc8291ce..2b2e98d7086ada7d1365585a581b1c1f828dd682 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -1500,7 +1500,7 @@ static int handleSock5Proxy(
       socksreq[6] = ((char*)hp->h_addr_list[0])[2];
       socksreq[7] = ((char*)hp->h_addr_list[0])[3];
 
-      dns->inuse--; /* not used anymore from now on */
+      Curl_resolv_unlock(dns); /* not used anymore from now on */
     }
     else {
       failf(conn->data, "Failed to resolve \"%s\" for SOCKS5 connect.",
@@ -2852,7 +2852,7 @@ CURLcode Curl_done(struct connectdata *conn)
   }
 
   if(conn->connect_addr)
-    conn->connect_addr->inuse--; /* done with this */
+    Curl_resolv_unlock(conn->connect_addr); /* done with this */
 
 #ifdef MALLOCDEBUG
   /* scan for DNS cache entries still marked as in use */