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
}
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 ) {
&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
#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);
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.",
}
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 */