Lines Matching refs:acache

48 #define DNS_ACACHE_VALID(acache)	ISC_MAGIC_VALID(acache, ACACHE_MAGIC)  argument
60 "acache %p: %s", acache, (m))
137 dns_acache_t *acache; member
215 dns_acache_t *acache; member
246 static inline isc_boolean_t check_noentry(dns_acache_t *acache);
247 static void destroy(dns_acache_t *acache);
248 static void shutdown_entries(dns_acache_t *acache);
249 static void shutdown_buckets(dns_acache_t *acache);
251 static inline void unlink_dbentries(dns_acache_t *acache,
253 static inline isc_result_t finddbent(dns_acache_t *acache,
255 static inline void clear_entry(dns_acache_t *acache, dns_acacheentry_t *entry);
256 static isc_result_t acache_cleaner_init(dns_acache_t *acache,
272 reset_stats(dns_acache_t *acache) { in reset_stats() argument
273 acache->stats.hits = 0; in reset_stats()
274 acache->stats.queries = 0; in reset_stats()
275 acache->stats.misses = 0; in reset_stats()
276 acache->stats.adds = 0; in reset_stats()
277 acache->stats.deleted = 0; in reset_stats()
278 acache->stats.cleaned = 0; in reset_stats()
279 acache->stats.overmem = 0; in reset_stats()
280 acache->stats.overmem_nocreates = 0; in reset_stats()
281 acache->stats.nomem = 0; in reset_stats()
288 check_noentry(dns_acache_t *acache) { in check_noentry() argument
289 if (ISC_LIST_EMPTY(acache->entries) && acache->dbentries == 0) { in check_noentry()
300 shutdown_entries(dns_acache_t *acache) { in shutdown_entries() argument
303 REQUIRE(DNS_ACACHE_VALID(acache)); in shutdown_entries()
304 INSIST(acache->shutting_down); in shutdown_entries()
309 for (entry = ISC_LIST_HEAD(acache->entries); in shutdown_entries()
314 ACACHE_LOCK(&acache->entrylocks[entry->locknum], in shutdown_entries()
321 if (acache->cleaner.current_entry != entry) in shutdown_entries()
322 ISC_LIST_UNLINK(acache->entries, entry, link); in shutdown_entries()
323 unlink_dbentries(acache, entry); in shutdown_entries()
329 ACACHE_UNLOCK(&acache->entrylocks[entry->locknum], in shutdown_entries()
332 if (acache->cleaner.current_entry != entry) in shutdown_entries()
341 shutdown_buckets(dns_acache_t *acache) { in shutdown_buckets() argument
345 REQUIRE(DNS_ACACHE_VALID(acache)); in shutdown_buckets()
346 INSIST(acache->shutting_down); in shutdown_buckets()
349 while ((dbent = ISC_LIST_HEAD(acache->dbbucket[i])) != NULL) { in shutdown_buckets()
352 ISC_LIST_UNLINK(acache->dbbucket[i], dbent, link); in shutdown_buckets()
356 isc_mem_put(acache->mctx, dbent, sizeof(*dbent)); in shutdown_buckets()
358 acache->dbentries--; in shutdown_buckets()
362 INSIST(acache->dbentries == 0); in shutdown_buckets()
367 dns_acache_t *acache; in shutdown_task() local
371 acache = ev->ev_arg; in shutdown_task()
372 INSIST(DNS_ACACHE_VALID(acache)); in shutdown_task()
376 LOCK(&acache->lock); in shutdown_task()
378 shutdown_entries(acache); in shutdown_task()
379 shutdown_buckets(acache); in shutdown_task()
381 UNLOCK(&acache->lock); in shutdown_task()
383 dns_acache_detach(&acache); in shutdown_task()
388 unlink_dbentries(dns_acache_t *acache, dns_acacheentry_t *ent) { in unlink_dbentries() argument
395 result = finddbent(acache, ent->origdb, &dbent); in unlink_dbentries()
403 result = finddbent(acache, ent->db, &dbent); in unlink_dbentries()
413 dns_acache_t *acache; in destroy_entry() local
417 acache = entry->acache; in destroy_entry()
418 REQUIRE(DNS_ACACHE_VALID(acache)); in destroy_entry()
424 clear_entry(acache, entry); in destroy_entry()
426 isc_mem_put(acache->mctx, entry, sizeof(*entry)); in destroy_entry()
428 dns_acache_detach(&acache); in destroy_entry()
432 destroy(dns_acache_t *acache) { in destroy() argument
435 REQUIRE(DNS_ACACHE_VALID(acache)); in destroy()
439 isc_mem_setwater(acache->mctx, NULL, NULL, 0, 0); in destroy()
441 if (acache->cleaner.overmem_event != NULL) in destroy()
442 isc_event_free(&acache->cleaner.overmem_event); in destroy()
444 if (acache->cleaner.resched_event != NULL) in destroy()
445 isc_event_free(&acache->cleaner.resched_event); in destroy()
447 if (acache->task != NULL) in destroy()
448 isc_task_detach(&acache->task); in destroy()
451 ACACHE_DESTROYLOCK(&acache->entrylocks[i]); in destroy()
452 isc_mem_put(acache->mctx, acache->entrylocks, in destroy()
453 sizeof(*acache->entrylocks) * in destroy()
456 DESTROYLOCK(&acache->cleaner.lock); in destroy()
458 DESTROYLOCK(&acache->lock); in destroy()
459 acache->magic = 0; in destroy()
461 isc_mem_putanddetach(&acache->mctx, acache, sizeof(*acache)); in destroy()
465 finddbent(dns_acache_t *acache, dns_db_t *db, dbentry_t **dbentryp) { in finddbent() argument
469 REQUIRE(DNS_ACACHE_VALID(acache)); in finddbent()
480 for (dbentry = ISC_LIST_HEAD(acache->dbbucket[bucket]); in finddbent()
496 clear_entry(dns_acache_t *acache, dns_acacheentry_t *entry) { in clear_entry() argument
497 REQUIRE(DNS_ACACHE_VALID(acache)); in clear_entry()
514 isc_mem_put(acache->mctx, rdataset, sizeof(*rdataset)); in clear_entry()
517 dns_name_free(entry->foundname, acache->mctx); in clear_entry()
518 isc_mem_put(acache->mctx, entry->foundname, in clear_entry()
541 acache_cleaner_init(dns_acache_t *acache, isc_timermgr_t *timermgr, in acache_cleaner_init() argument
554 cleaner->acache = acache; in acache_cleaner_init()
563 cleaner->acache->live_cleaners++; in acache_cleaner_init()
565 result = isc_task_onshutdown(acache->task, in acache_cleaner_init()
567 acache); in acache_cleaner_init()
580 acache->task, in acache_cleaner_init()
592 isc_event_allocate(acache->mctx, cleaner, in acache_cleaner_init()
602 isc_event_allocate(acache->mctx, cleaner, in acache_cleaner_init()
621 cleaner->acache->live_cleaners--; in acache_cleaner_init()
630 dns_acache_t *acache = cleaner->acache; in begin_cleaning() local
639 INSIST(DNS_ACACHE_VALID(acache)); in begin_cleaning()
645 (unsigned long)isc_mem_inuse(cleaner->acache->mctx)); in begin_cleaning()
647 LOCK(&acache->lock); in begin_cleaning()
649 head = ISC_LIST_HEAD(acache->entries); in begin_cleaning()
653 UNLOCK(&acache->lock); in begin_cleaning()
658 isc_task_send(acache->task, &cleaner->resched_event); in begin_cleaning()
666 dns_acache_t *acache = cleaner->acache; in end_cleaning() local
674 LOCK(&acache->lock); in end_cleaning()
685 ISC_LIST_UNLINK(acache->entries, in end_cleaning()
692 acache->stats.overmem++; in end_cleaning()
693 acache->stats.cleaned += cleaner->ncleaned; in end_cleaning()
694 acache->stats.cleaner_runs++; in end_cleaning()
702 acache, in end_cleaning()
703 acache->stats.hits, acache->stats.misses, in end_cleaning()
704 acache->stats.queries, in end_cleaning()
705 acache->stats.adds, acache->stats.deleted, in end_cleaning()
706 acache->stats.cleaned, acache->stats.cleaner_runs, in end_cleaning()
707 acache->stats.overmem, acache->stats.overmem_nocreates, in end_cleaning()
708 acache->stats.nomem); in end_cleaning()
709 reset_stats(acache); in end_cleaning()
713 UNLOCK(&acache->lock); in end_cleaning()
715 dns_acache_setcleaninginterval(cleaner->acache, in end_cleaning()
722 (unsigned long)isc_mem_inuse(cleaner->acache->mctx)); in end_cleaning()
807 dns_acache_t *acache = cleaner->acache; in acache_incremental_cleaning_action() local
814 INSIST(DNS_ACACHE_VALID(acache)); in acache_incremental_cleaning_action()
815 INSIST(task == acache->task); in acache_incremental_cleaning_action()
831 LOCK(&acache->lock); in acache_incremental_cleaning_action()
847 ACACHE_LOCK(&acache->entrylocks[entry->locknum], in acache_incremental_cleaning_action()
852 ISC_LIST_UNLINK(acache->entries, entry, link); in acache_incremental_cleaning_action()
853 unlink_dbentries(acache, entry); in acache_incremental_cleaning_action()
861 ACACHE_UNLOCK(&acache->entrylocks[entry->locknum], in acache_incremental_cleaning_action()
869 entry = ISC_LIST_HEAD(acache->entries); in acache_incremental_cleaning_action()
891 UNLOCK(&acache->lock); in acache_incremental_cleaning_action()
909 UNLOCK(&acache->lock); in acache_incremental_cleaning_action()
914 (unsigned long)isc_mem_inuse(cleaner->acache->mctx)); in acache_incremental_cleaning_action()
969 dns_acache_t *acache = arg; in water() local
972 REQUIRE(DNS_ACACHE_VALID(acache)); in water()
978 (unsigned long)isc_mem_inuse(acache->mctx)); in water()
980 LOCK(&acache->cleaner.lock); in water()
982 if (acache->cleaner.overmem != overmem) { in water()
983 acache->cleaner.overmem = overmem; in water()
985 if (acache->cleaner.overmem_event != NULL) in water()
986 isc_task_send(acache->task, in water()
987 &acache->cleaner.overmem_event); in water()
988 isc_mem_waterack(acache->mctx, mark); in water()
991 UNLOCK(&acache->cleaner.lock); in water()
999 dns_acache_t *acache = event->ev_arg; in acache_cleaner_shutdown_action() local
1002 INSIST(task == acache->task); in acache_cleaner_shutdown_action()
1004 INSIST(DNS_ACACHE_VALID(acache)); in acache_cleaner_shutdown_action()
1008 if (CLEANER_BUSY(&acache->cleaner)) in acache_cleaner_shutdown_action()
1009 end_cleaning(&acache->cleaner, event); in acache_cleaner_shutdown_action()
1013 LOCK(&acache->lock); in acache_cleaner_shutdown_action()
1015 acache->live_cleaners--; in acache_cleaner_shutdown_action()
1016 INSIST(acache->live_cleaners == 0); in acache_cleaner_shutdown_action()
1018 if (isc_refcount_current(&acache->refs) == 0) { in acache_cleaner_shutdown_action()
1019 INSIST(check_noentry(acache) == ISC_TRUE); in acache_cleaner_shutdown_action()
1028 if (acache->cleaner.cleaning_timer != NULL) in acache_cleaner_shutdown_action()
1029 isc_timer_detach(&acache->cleaner.cleaning_timer); in acache_cleaner_shutdown_action()
1034 UNLOCK(&acache->lock); in acache_cleaner_shutdown_action()
1037 destroy(acache); in acache_cleaner_shutdown_action()
1050 dns_acache_t *acache; in dns_acache_create() local
1056 acache = isc_mem_get(mctx, sizeof(*acache)); in dns_acache_create()
1057 if (acache == NULL) in dns_acache_create()
1062 result = isc_refcount_init(&acache->refs, 1); in dns_acache_create()
1064 isc_mem_put(mctx, acache, sizeof(*acache)); in dns_acache_create()
1068 result = isc_mutex_init(&acache->lock); in dns_acache_create()
1070 isc_refcount_decrement(&acache->refs, NULL); in dns_acache_create()
1071 isc_refcount_destroy(&acache->refs); in dns_acache_create()
1072 isc_mem_put(mctx, acache, sizeof(*acache)); in dns_acache_create()
1076 acache->mctx = NULL; in dns_acache_create()
1077 isc_mem_attach(mctx, &acache->mctx); in dns_acache_create()
1078 ISC_LIST_INIT(acache->entries); in dns_acache_create()
1080 acache->shutting_down = ISC_FALSE; in dns_acache_create()
1082 acache->task = NULL; in dns_acache_create()
1083 acache->entrylocks = NULL; in dns_acache_create()
1085 result = isc_task_create(taskmgr, 1, &acache->task); in dns_acache_create()
1093 isc_task_setname(acache->task, "acachetask", acache); in dns_acache_create()
1094 ISC_EVENT_INIT(&acache->cevent, sizeof(acache->cevent), 0, NULL, in dns_acache_create()
1097 acache->cevent_sent = ISC_FALSE; in dns_acache_create()
1099 acache->dbentries = 0; in dns_acache_create()
1101 ISC_LIST_INIT(acache->dbbucket[i]); in dns_acache_create()
1103 acache->entrylocks = isc_mem_get(mctx, sizeof(*acache->entrylocks) * in dns_acache_create()
1105 if (acache->entrylocks == NULL) { in dns_acache_create()
1110 result = ACACHE_INITLOCK(&acache->entrylocks[i]); in dns_acache_create()
1113 ACACHE_DESTROYLOCK(&acache->entrylocks[i]); in dns_acache_create()
1114 isc_mem_put(mctx, acache->entrylocks, in dns_acache_create()
1115 sizeof(*acache->entrylocks) * in dns_acache_create()
1117 acache->entrylocks = NULL; in dns_acache_create()
1122 acache->live_cleaners = 0; in dns_acache_create()
1123 result = acache_cleaner_init(acache, timermgr, &acache->cleaner); in dns_acache_create()
1127 acache->stats.cleaner_runs = 0; in dns_acache_create()
1128 reset_stats(acache); in dns_acache_create()
1130 acache->magic = ACACHE_MAGIC; in dns_acache_create()
1132 *acachep = acache; in dns_acache_create()
1136 if (acache->task != NULL) in dns_acache_create()
1137 isc_task_detach(&acache->task); in dns_acache_create()
1138 DESTROYLOCK(&acache->lock); in dns_acache_create()
1139 isc_refcount_decrement(&acache->refs, NULL); in dns_acache_create()
1140 isc_refcount_destroy(&acache->refs); in dns_acache_create()
1141 if (acache->entrylocks != NULL) { in dns_acache_create()
1143 ACACHE_DESTROYLOCK(&acache->entrylocks[i]); in dns_acache_create()
1144 isc_mem_put(mctx, acache->entrylocks, in dns_acache_create()
1145 sizeof(*acache->entrylocks) * in dns_acache_create()
1148 isc_mem_put(mctx, acache, sizeof(*acache)); in dns_acache_create()
1167 dns_acache_countquerymiss(dns_acache_t *acache) { in dns_acache_countquerymiss() argument
1168 acache->stats.misses++; /* XXXSK danger: unlocked! */ in dns_acache_countquerymiss()
1169 acache->stats.queries++; /* XXXSK danger: unlocked! */ in dns_acache_countquerymiss()
1174 dns_acache_t *acache; in dns_acache_detach() local
1179 acache = *acachep; in dns_acache_detach()
1183 isc_refcount_decrement(&acache->refs, &refs); in dns_acache_detach()
1185 INSIST(check_noentry(acache) == ISC_TRUE); in dns_acache_detach()
1194 if (should_free && acache->live_cleaners > 0) { in dns_acache_detach()
1195 isc_task_shutdown(acache->task); in dns_acache_detach()
1200 destroy(acache); in dns_acache_detach()
1204 dns_acache_shutdown(dns_acache_t *acache) { in dns_acache_shutdown() argument
1205 REQUIRE(DNS_ACACHE_VALID(acache)); in dns_acache_shutdown()
1207 LOCK(&acache->lock); in dns_acache_shutdown()
1211 if (!acache->shutting_down) { in dns_acache_shutdown()
1215 INSIST(!acache->cevent_sent); in dns_acache_shutdown()
1217 acache->shutting_down = ISC_TRUE; in dns_acache_shutdown()
1219 isc_mem_setwater(acache->mctx, NULL, NULL, 0, 0); in dns_acache_shutdown()
1225 dns_acache_attach(acache, &acache_evarg); in dns_acache_shutdown()
1226 event = &acache->cevent; in dns_acache_shutdown()
1228 isc_task_send(acache->task, &event); in dns_acache_shutdown()
1229 acache->cevent_sent = ISC_TRUE; in dns_acache_shutdown()
1232 UNLOCK(&acache->lock); in dns_acache_shutdown()
1236 dns_acache_setdb(dns_acache_t *acache, dns_db_t *db) { in dns_acache_setdb() argument
1241 REQUIRE(DNS_ACACHE_VALID(acache)); in dns_acache_setdb()
1246 LOCK(&acache->lock); in dns_acache_setdb()
1249 result = finddbent(acache, db, &dbentry); in dns_acache_setdb()
1256 dbentry = isc_mem_get(acache->mctx, sizeof(*dbentry)); in dns_acache_setdb()
1272 ISC_LIST_APPEND(acache->dbbucket[bucket], dbentry, link); in dns_acache_setdb()
1274 acache->dbentries++; in dns_acache_setdb()
1277 UNLOCK(&acache->lock); in dns_acache_setdb()
1283 dns_acache_putdb(dns_acache_t *acache, dns_db_t *db) { in dns_acache_putdb() argument
1289 REQUIRE(DNS_ACACHE_VALID(acache)); in dns_acache_putdb()
1294 LOCK(&acache->lock); in dns_acache_putdb()
1297 result = finddbent(acache, db, &dbentry); in dns_acache_putdb()
1302 UNLOCK(&acache->lock); in dns_acache_putdb()
1313 ACACHE_LOCK(&acache->entrylocks[entry->locknum], in dns_acache_putdb()
1321 if (acache->cleaner.current_entry != entry) in dns_acache_putdb()
1322 ISC_LIST_UNLINK(acache->entries, entry, link); in dns_acache_putdb()
1323 unlink_dbentries(acache, entry); in dns_acache_putdb()
1329 ACACHE_UNLOCK(&acache->entrylocks[entry->locknum], in dns_acache_putdb()
1332 if (acache->cleaner.current_entry != entry) in dns_acache_putdb()
1336 ACACHE_LOCK(&acache->entrylocks[entry->locknum], in dns_acache_putdb()
1340 if (acache->cleaner.current_entry != entry) in dns_acache_putdb()
1341 ISC_LIST_UNLINK(acache->entries, entry, link); in dns_acache_putdb()
1342 unlink_dbentries(acache, entry); in dns_acache_putdb()
1348 ACACHE_UNLOCK(&acache->entrylocks[entry->locknum], in dns_acache_putdb()
1351 if (acache->cleaner.current_entry != entry) in dns_acache_putdb()
1360 ISC_LIST_UNLINK(acache->dbbucket[bucket], dbentry, link); in dns_acache_putdb()
1363 isc_mem_put(acache->mctx, dbentry, sizeof(*dbentry)); in dns_acache_putdb()
1365 acache->dbentries--; in dns_acache_putdb()
1367 acache->stats.deleted++; in dns_acache_putdb()
1369 UNLOCK(&acache->lock); in dns_acache_putdb()
1375 dns_acache_createentry(dns_acache_t *acache, dns_db_t *origdb, in dns_acache_createentry() argument
1383 REQUIRE(DNS_ACACHE_VALID(acache)); in dns_acache_createentry()
1399 if (acache->cleaner.overmem) { in dns_acache_createentry()
1400 acache->stats.overmem_nocreates++; /* XXXSK danger: unlocked! */ in dns_acache_createentry()
1404 newentry = isc_mem_get(acache->mctx, sizeof(*newentry)); in dns_acache_createentry()
1406 acache->stats.nomem++; /* XXXMLG danger: unlocked! */ in dns_acache_createentry()
1415 isc_mem_put(acache->mctx, newentry, sizeof(*newentry)); in dns_acache_createentry()
1423 newentry->acache = NULL; in dns_acache_createentry()
1424 dns_acache_attach(acache, &newentry->acache); in dns_acache_createentry()
1455 dns_acache_t *acache; in dns_acache_getentry() local
1465 acache = entry->acache; in dns_acache_getentry()
1466 REQUIRE(DNS_ACACHE_VALID(acache)); in dns_acache_getentry()
1469 ACACHE_LOCK(&acache->entrylocks[locknum], isc_rwlocktype_read); in dns_acache_getentry()
1499 ACACHE_UNLOCK(&acache->entrylocks[locknum], in dns_acache_getentry()
1515 entry->acache->stats.hits++; /* XXXMLG danger: unlocked! */ in dns_acache_getentry()
1516 entry->acache->stats.queries++; in dns_acache_getentry()
1518 ACACHE_UNLOCK(&acache->entrylocks[locknum], isc_rwlocktype_read); in dns_acache_getentry()
1541 dns_acache_setentry(dns_acache_t *acache, dns_acacheentry_t *entry, in dns_acache_setentry() argument
1551 REQUIRE(DNS_ACACHE_VALID(acache)); in dns_acache_setentry()
1554 LOCK(&acache->lock); /* XXX: need to lock it here for ordering */ in dns_acache_setentry()
1555 ACACHE_LOCK(&acache->entrylocks[entry->locknum], isc_rwlocktype_write); in dns_acache_setentry()
1595 entry->foundname = isc_mem_get(acache->mctx, in dns_acache_setentry()
1603 result = dns_name_dup(fname, acache->mctx, in dns_acache_setentry()
1611 crdataset = isc_mem_get(acache->mctx, in dns_acache_setentry()
1626 result = finddbent(acache, entry->origdb, &odbent); in dns_acache_setentry()
1631 result = finddbent(acache, db, &rdbent); in dns_acache_setentry()
1636 ISC_LIST_APPEND(acache->entries, entry, link); in dns_acache_setentry()
1647 ACACHE_UNLOCK(&acache->entrylocks[entry->locknum], in dns_acache_setentry()
1650 acache->stats.adds++; in dns_acache_setentry()
1651 UNLOCK(&acache->lock); in dns_acache_setentry()
1656 clear_entry(acache, entry); in dns_acache_setentry()
1658 ACACHE_UNLOCK(&acache->entrylocks[entry->locknum], in dns_acache_setentry()
1660 UNLOCK(&acache->lock); in dns_acache_setentry()
1667 dns_acache_t *acache; in dns_acache_cancelentry() local
1672 acache = entry->acache; in dns_acache_cancelentry()
1674 INSIST(DNS_ACACHE_VALID(entry->acache)); in dns_acache_cancelentry()
1676 LOCK(&acache->lock); in dns_acache_cancelentry()
1677 ACACHE_LOCK(&acache->entrylocks[entry->locknum], isc_rwlocktype_write); in dns_acache_cancelentry()
1687 unlink_dbentries(acache, entry); in dns_acache_cancelentry()
1688 clear_entry(entry->acache, entry); in dns_acache_cancelentry()
1693 ACACHE_UNLOCK(&acache->entrylocks[entry->locknum], in dns_acache_cancelentry()
1695 UNLOCK(&acache->lock); in dns_acache_cancelentry()
1728 (*entryp)->acache->stats.deleted++; in dns_acache_detachentry()
1736 dns_acache_setcleaninginterval(dns_acache_t *acache, unsigned int t) { in dns_acache_setcleaninginterval() argument
1740 REQUIRE(DNS_ACACHE_VALID(acache)); in dns_acache_setcleaninginterval()
1744 LOCK(&acache->lock); in dns_acache_setcleaninginterval()
1750 if (acache->cleaner.cleaning_timer == NULL) in dns_acache_setcleaninginterval()
1753 acache->cleaner.cleaning_interval = t; in dns_acache_setcleaninginterval()
1756 result = isc_timer_reset(acache->cleaner.cleaning_timer, in dns_acache_setcleaninginterval()
1760 isc_interval_set(&interval, acache->cleaner.cleaning_interval, in dns_acache_setcleaninginterval()
1762 result = isc_timer_reset(acache->cleaner.cleaning_timer, in dns_acache_setcleaninginterval()
1775 acache, t); in dns_acache_setcleaninginterval()
1778 UNLOCK(&acache->lock); in dns_acache_setcleaninginterval()
1786 dns_acache_setcachesize(dns_acache_t *acache, size_t size) { in dns_acache_setcachesize() argument
1789 REQUIRE(DNS_ACACHE_VALID(acache)); in dns_acache_setcachesize()
1798 isc_mem_setwater(acache->mctx, water, acache, 0, 0); in dns_acache_setcachesize()
1800 isc_mem_setwater(acache->mctx, water, acache, in dns_acache_setcachesize()