struct infra_cache* infra_create(struct config_file* cfg) { struct infra_cache* infra = (struct infra_cache*)calloc(1, sizeof(struct infra_cache)); size_t maxmem = cfg->infra_cache_numhosts * (sizeof(struct infra_key)+ sizeof(struct infra_data)+INFRA_BYTES_NAME); infra->hosts = slabhash_create(cfg->infra_cache_slabs, INFRA_HOST_STARTSIZE, maxmem, &infra_sizefunc, &infra_compfunc, &infra_delkeyfunc, &infra_deldatafunc, NULL); if(!infra->hosts) { free(infra); return NULL; } infra->host_ttl = cfg->host_ttl; name_tree_init(&infra->domain_limits); infra_dp_ratelimit = cfg->ratelimit; if(cfg->ratelimit != 0) { infra->domain_rates = slabhash_create(cfg->ratelimit_slabs, INFRA_HOST_STARTSIZE, cfg->ratelimit_size, &rate_sizefunc, &rate_compfunc, &rate_delkeyfunc, &rate_deldatafunc, NULL); if(!infra->domain_rates) { infra_delete(infra); return NULL; } /* insert config data into ratelimits */ if(!infra_ratelimit_cfg_insert(infra, cfg)) { infra_delete(infra); return NULL; } name_tree_init_parents(&infra->domain_limits); } return infra; }
void slabhash_test(void) { /* start very very small array, so it can do lots of table_grow() */ /* also small in size so that reclaim has to be done quickly. */ struct slabhash* table; unit_show_feature("slabhash"); table = slabhash_create(4, 2, 10400, test_slabhash_sizefunc, test_slabhash_compfunc, test_slabhash_delkey, test_slabhash_deldata, NULL); test_short_table(table); test_long_table(table); slabhash_delete(table); table = slabhash_create(4, 2, 10400, test_slabhash_sizefunc, test_slabhash_compfunc, test_slabhash_delkey, test_slabhash_deldata, NULL); test_threaded_table(table); slabhash_delete(table); }
struct infra_cache* infra_create(struct config_file* cfg) { struct infra_cache* infra = (struct infra_cache*)calloc(1, sizeof(struct infra_cache)); size_t maxmem = cfg->infra_cache_numhosts * (sizeof(struct infra_key)+ sizeof(struct infra_data)+INFRA_BYTES_NAME); infra->hosts = slabhash_create(cfg->infra_cache_slabs, INFRA_HOST_STARTSIZE, maxmem, &infra_sizefunc, &infra_compfunc, &infra_delkeyfunc, &infra_deldatafunc, NULL); if(!infra->hosts) { free(infra); return NULL; } infra->host_ttl = cfg->host_ttl; return infra; }
void daemon_apply_cfg(struct daemon* daemon, struct config_file* cfg) { daemon->cfg = cfg; config_apply(cfg); if(!slabhash_is_size(daemon->env->msg_cache, cfg->msg_cache_size, cfg->msg_cache_slabs)) { slabhash_delete(daemon->env->msg_cache); daemon->env->msg_cache = slabhash_create(cfg->msg_cache_slabs, HASH_DEFAULT_STARTARRAY, cfg->msg_cache_size, msgreply_sizefunc, query_info_compare, query_entry_delete, reply_info_delete, NULL); if(!daemon->env->msg_cache) { fatal_exit("malloc failure updating config settings"); } } if((daemon->env->rrset_cache = rrset_cache_adjust( daemon->env->rrset_cache, cfg, &daemon->superalloc)) == 0) fatal_exit("malloc failure updating config settings"); if((daemon->env->infra_cache = infra_adjust(daemon->env->infra_cache, cfg))==0) fatal_exit("malloc failure updating config settings"); }
struct key_cache* key_cache_create(struct config_file* cfg) { struct key_cache* kcache = (struct key_cache*)calloc(1, sizeof(*kcache)); size_t numtables, start_size, maxmem; if(!kcache) { log_err("malloc failure"); return NULL; } numtables = cfg->key_cache_slabs; start_size = HASH_DEFAULT_STARTARRAY; maxmem = cfg->key_cache_size; kcache->slab = slabhash_create(numtables, start_size, maxmem, &key_entry_sizefunc, &key_entry_compfunc, &key_entry_delkeyfunc, &key_entry_deldatafunc, NULL); if(!kcache->slab) { log_err("malloc failure"); free(kcache); return NULL; } return kcache; }
int context_finalize(struct ub_ctx* ctx) { struct config_file* cfg = ctx->env->cfg; verbosity = cfg->verbosity; if(ctx->logfile_override) log_file(ctx->log_out); else log_init(cfg->logfile, cfg->use_syslog, NULL); config_apply(cfg); if(!modstack_setup(&ctx->mods, cfg->module_conf, ctx->env)) return UB_INITFAIL; ctx->local_zones = local_zones_create(); if(!ctx->local_zones) return UB_NOMEM; if(!local_zones_apply_cfg(ctx->local_zones, cfg)) return UB_INITFAIL; if(!ctx->env->msg_cache || cfg->msg_cache_size != slabhash_get_size(ctx->env->msg_cache) || cfg->msg_cache_slabs != ctx->env->msg_cache->size) { slabhash_delete(ctx->env->msg_cache); ctx->env->msg_cache = slabhash_create(cfg->msg_cache_slabs, HASH_DEFAULT_STARTARRAY, cfg->msg_cache_size, msgreply_sizefunc, query_info_compare, query_entry_delete, reply_info_delete, NULL); if(!ctx->env->msg_cache) return UB_NOMEM; } ctx->env->rrset_cache = rrset_cache_adjust(ctx->env->rrset_cache, ctx->env->cfg, ctx->env->alloc); if(!ctx->env->rrset_cache) return UB_NOMEM; ctx->env->infra_cache = infra_adjust(ctx->env->infra_cache, cfg); if(!ctx->env->infra_cache) return UB_NOMEM; ctx->finalized = 1; return UB_NOERROR; }