static void
log_quota(dns_adbentry_t *entry, const char *fmt, ...) ISC_FORMAT_PRINTF(2, 3);
+static bool
+adbentry_overquota(dns_adbentry_t *entry);
+
/*
* MUST NOT overlap DNS_ADBFIND_* flags!
*/
entry = namehook->entry;
LOCK(&entry->lock);
- if (dns_adbentry_overquota(entry)) {
+ if (adbentry_overquota(entry)) {
find->options |= (DNS_ADBFIND_LAMEPRUNED |
DNS_ADBFIND_OVERQUOTA);
goto nextv4;
entry = namehook->entry;
LOCK(&entry->lock);
- if (dns_adbentry_overquota(entry)) {
+ if (adbentry_overquota(entry)) {
find->options |= (DNS_ADBFIND_LAMEPRUNED |
DNS_ADBFIND_OVERQUOTA);
goto nextv6;
}
}
-bool
-dns_adbentry_overquota(dns_adbentry_t *entry) {
- uint_fast32_t quota, active;
-
+static bool
+adbentry_overquota(dns_adbentry_t *entry) {
REQUIRE(DNS_ADBENTRY_VALID(entry));
- quota = atomic_load_relaxed(&entry->quota);
- active = atomic_load_acquire(&entry->active);
+ uint_fast32_t quota = atomic_load_relaxed(&entry->quota);
+ uint_fast32_t active = atomic_load_acquire(&entry->active);
return (quota != 0 && active >= quota);
}
+bool
+dns_adb_overquota(dns_adb_t *adb ISC_ATTR_UNUSED, dns_adbaddrinfo_t *addrinfo) {
+ REQUIRE(DNS_ADBADDRINFO_VALID(addrinfo));
+
+ return (adbentry_overquota(addrinfo->entry));
+}
+
void
dns_adb_beginudpfetch(dns_adb_t *adb, dns_adbaddrinfo_t *addr) {
uint_fast32_t active;
#include <isc/lang.h>
#include <isc/magic.h>
#include <isc/mem.h>
+#include <isc/mutex.h>
#include <isc/sockaddr.h>
#include <dns/types.h>
*/
bool
-dns_adbentry_overquota(dns_adbentry_t *entry);
+dns_adb_overquota(dns_adb_t *adb, dns_adbaddrinfo_t *addr);
/*%<
* Returns true if the specified ADB has too many active fetches.
*
query->magic = QUERY_MAGIC;
if ((query->options & DNS_FETCHOPT_TCP) == 0) {
- if (dns_adbentry_overquota(addrinfo->entry)) {
+ if (dns_adb_overquota(fctx->adb, addrinfo)) {
UNLOCK(&fctx->lock);
result = ISC_R_QUOTA;
goto cleanup_dispatch;
addrinfo = fctx_nextaddress(fctx);
/* Try to find an address that isn't over quota */
- while (addrinfo != NULL && dns_adbentry_overquota(addrinfo->entry)) {
+ while (addrinfo != NULL && dns_adb_overquota(fctx->adb, addrinfo)) {
addrinfo = fctx_nextaddress(fctx);
}
addrinfo = fctx_nextaddress(fctx);
while (addrinfo != NULL &&
- dns_adbentry_overquota(addrinfo->entry))
+ dns_adb_overquota(fctx->adb, addrinfo))
{
addrinfo = fctx_nextaddress(fctx);
}