aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2002-11-11 22:36:00 +0000
committerDaniel Stenberg <daniel@haxx.se>2002-11-11 22:36:00 +0000
commit66eb98bb0a3d171b91c77f8a536011f6b25c1adc (patch)
treedd753011a607a248f3fbfaf946ed8c9883203dfc
parent299546f5c0bd1b8ba5a463efd6f087974ae4633a (diff)
unlock dns cache entries with a function call instead of a variable fiddle
-rw-r--r--lib/connect.c4
-rw-r--r--lib/ftp.c5
-rw-r--r--lib/hostip.h11
-rw-r--r--lib/url.c4
4 files changed, 18 insertions, 6 deletions
diff --git a/lib/connect.c b/lib/connect.c
index b97c9da90..d2080c452 100644
--- a/lib/connect.c
+++ b/lib/connect.c
@@ -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
diff --git a/lib/ftp.c b/lib/ftp.c
index 5dd38771d..270154f9f 100644
--- 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
diff --git a/lib/hostip.h b/lib/hostip.h
index 2593bc343..78a17e2e8 100644
--- a/lib/hostip.h
+++ b/lib/hostip.h
@@ -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);
diff --git a/lib/url.c b/lib/url.c
index 0274cb0f9..2b2e98d70 100644
--- 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 */