Lines Matching defs:dbtable

19  * $Id: dbtable.c,v 1.33 2007/06/19 23:47:16 tbox Exp $
33 #include <dns/dbtable.h>
53 #define VALID_DBTABLE(dbtable) ISC_MAGIC_VALID(dbtable, DBTABLE_MAGIC)
68 dns_dbtable_t *dbtable;
74 dbtable = (dns_dbtable_t *)isc_mem_get(mctx, sizeof(*dbtable));
75 if (dbtable == NULL)
78 dbtable->rbt = NULL;
79 result = dns_rbt_create(mctx, dbdetach, NULL, &dbtable->rbt);
83 result = isc_mutex_init(&dbtable->lock);
87 result = isc_rwlock_init(&dbtable->tree_lock, 0, 0);
91 dbtable->default_db = NULL;
92 dbtable->mctx = mctx;
93 dbtable->rdclass = rdclass;
94 dbtable->magic = DBTABLE_MAGIC;
95 dbtable->references = 1;
97 *dbtablep = dbtable;
102 DESTROYLOCK(&dbtable->lock);
105 dns_rbt_destroy(&dbtable->rbt);
108 isc_mem_put(mctx, dbtable, sizeof(*dbtable));
114 dbtable_free(dns_dbtable_t *dbtable) {
119 RWLOCK(&dbtable->tree_lock, isc_rwlocktype_write);
121 if (dbtable->default_db != NULL)
122 dns_db_detach(&dbtable->default_db);
124 dns_rbt_destroy(&dbtable->rbt);
126 RWUNLOCK(&dbtable->tree_lock, isc_rwlocktype_write);
128 isc_rwlock_destroy(&dbtable->tree_lock);
130 dbtable->magic = 0;
132 isc_mem_put(dbtable->mctx, dbtable, sizeof(*dbtable));
153 dns_dbtable_t *dbtable;
157 dbtable = *dbtablep;
158 REQUIRE(VALID_DBTABLE(dbtable));
160 LOCK(&dbtable->lock);
162 INSIST(dbtable->references > 0);
163 dbtable->references--;
164 if (dbtable->references == 0)
167 UNLOCK(&dbtable->lock);
170 dbtable_free(dbtable);
176 dns_dbtable_add(dns_dbtable_t *dbtable, dns_db_t *db) {
180 REQUIRE(VALID_DBTABLE(dbtable));
181 REQUIRE(dns_db_class(db) == dbtable->rdclass);
186 RWLOCK(&dbtable->tree_lock, isc_rwlocktype_write);
187 result = dns_rbt_addname(dbtable->rbt, dns_db_origin(clone), clone);
188 RWUNLOCK(&dbtable->tree_lock, isc_rwlocktype_write);
194 dns_dbtable_remove(dns_dbtable_t *dbtable, dns_db_t *db) {
199 REQUIRE(VALID_DBTABLE(dbtable));
211 RWLOCK(&dbtable->tree_lock, isc_rwlocktype_write);
213 result = dns_rbt_findname(dbtable->rbt, name, 0, NULL,
219 (void)dns_rbt_deletename(dbtable->rbt, name, ISC_FALSE);
222 RWUNLOCK(&dbtable->tree_lock, isc_rwlocktype_write);
226 dns_dbtable_adddefault(dns_dbtable_t *dbtable, dns_db_t *db) {
227 REQUIRE(VALID_DBTABLE(dbtable));
228 REQUIRE(dbtable->default_db == NULL);
231 RWLOCK(&dbtable->tree_lock, isc_rwlocktype_write);
233 dbtable->default_db = NULL;
234 dns_db_attach(db, &dbtable->default_db);
236 RWUNLOCK(&dbtable->tree_lock, isc_rwlocktype_write);
240 dns_dbtable_getdefault(dns_dbtable_t *dbtable, dns_db_t **dbp) {
241 REQUIRE(VALID_DBTABLE(dbtable));
244 RWLOCK(&dbtable->tree_lock, isc_rwlocktype_read);
246 dns_db_attach(dbtable->default_db, dbp);
248 RWUNLOCK(&dbtable->tree_lock, isc_rwlocktype_read);
252 dns_dbtable_removedefault(dns_dbtable_t *dbtable) {
253 REQUIRE(VALID_DBTABLE(dbtable));
255 RWLOCK(&dbtable->tree_lock, isc_rwlocktype_write);
257 dns_db_detach(&dbtable->default_db);
259 RWUNLOCK(&dbtable->tree_lock, isc_rwlocktype_write);
263 dns_dbtable_find(dns_dbtable_t *dbtable, dns_name_t *name,
275 RWLOCK(&dbtable->tree_lock, isc_rwlocktype_read);
277 result = dns_rbt_findname(dbtable->rbt, name, rbtoptions, NULL,
282 else if (dbtable->default_db != NULL) {
283 dns_db_attach(dbtable->default_db, dbp);
288 RWUNLOCK(&dbtable->tree_lock, isc_rwlocktype_read);