unlock dns cache entries with a function call instead of a variable fiddle

This commit is contained in:
Daniel Stenberg 2002-11-11 22:36:00 +00:00
parent 299546f5c0
commit 66eb98bb0a
4 changed files with 18 additions and 6 deletions

View 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

View File

@ -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

View 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);

View File

@ -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 */