ldap_pvt_thread_mutex_lock( &b->b_mutex );
+ b->b_dns_req = NULL;
if ( result || !res ) {
Debug( LDAP_DEBUG_ANY, "upstream_name_cb: "
"name resolution failed for backend '%s': %s\n",
b->b_opening--;
b->b_failed++;
ldap_pvt_thread_mutex_unlock( &b->b_mutex );
- backend_retry( b );
+ if ( result != EVUTIL_EAI_CANCEL ) {
+ backend_retry( b );
+ }
if ( res ) {
evutil_freeaddrinfo( res );
}
hostname = b->b_host;
ldap_pvt_thread_mutex_unlock( &b->b_mutex );
- evdns_getaddrinfo( dnsbase, hostname, NULL, &hints, upstream_name_cb, b );
+ assert( b->b_dns_req == NULL );
+ b->b_dns_req = evdns_getaddrinfo(
+ dnsbase, hostname, NULL, &hints, upstream_name_cb, b );
return;
fail:
CONNECTION_DESTROY(c);
assert( !c );
}
+ if ( b->b_dns_req ) {
+ evdns_getaddrinfo_cancel( b->b_dns_req );
+ b->b_dns_req = NULL;
+ b->b_opening--;
+ }
}
void
monitor_subsys_t *b_monitor;
#endif /* BALANCER_MODULE */
+ struct evdns_getaddrinfo_request *b_dns_req;
+
LDAP_CIRCLEQ_ENTRY(LloadBackend) b_next;
};