mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 22:45:39 +00:00
API cleanups
This commit is contained in:
@@ -68,7 +68,6 @@ typedef struct {
|
|||||||
node_lock * node_locks;
|
node_lock * node_locks;
|
||||||
/* Locked by lock */
|
/* Locked by lock */
|
||||||
unsigned int references;
|
unsigned int references;
|
||||||
isc_boolean_t shutting_down;
|
|
||||||
/* Locked by tree_lock */
|
/* Locked by tree_lock */
|
||||||
dns_rbt_t * tree;
|
dns_rbt_t * tree;
|
||||||
} dns_rbtdb_t;
|
} dns_rbtdb_t;
|
||||||
@@ -108,7 +107,7 @@ free_rbtdb(dns_rbtdb_t *rbtdb) {
|
|||||||
unsigned int i;
|
unsigned int i;
|
||||||
isc_region_t r;
|
isc_region_t r;
|
||||||
|
|
||||||
dns_name_toregion(&rbtdb->common.base, &r);
|
dns_name_toregion(&rbtdb->common.origin, &r);
|
||||||
if (r.base != NULL)
|
if (r.base != NULL)
|
||||||
isc_mem_put(rbtdb->common.mctx, r.base, r.length);
|
isc_mem_put(rbtdb->common.mctx, r.base, r.length);
|
||||||
if (rbtdb->tree != NULL)
|
if (rbtdb->tree != NULL)
|
||||||
@@ -163,18 +162,7 @@ detach(dns_db_t **dbp) {
|
|||||||
if (maybe_free)
|
if (maybe_free)
|
||||||
maybe_free_rbtdb(rbtdb);
|
maybe_free_rbtdb(rbtdb);
|
||||||
|
|
||||||
dbp = NULL;
|
*dbp = NULL;
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
shutdown(dns_db_t *db) {
|
|
||||||
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
|
|
||||||
|
|
||||||
REQUIRE(VALID_RBTDB(rbtdb));
|
|
||||||
|
|
||||||
LOCK(&rbtdb->lock);
|
|
||||||
rbtdb->shutting_down = ISC_TRUE;
|
|
||||||
UNLOCK(&rbtdb->lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -182,7 +170,6 @@ currentversion(dns_db_t *db, dns_dbversion_t **versionp) {
|
|||||||
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
|
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
|
||||||
|
|
||||||
REQUIRE(VALID_RBTDB(rbtdb));
|
REQUIRE(VALID_RBTDB(rbtdb));
|
||||||
REQUIRE(versionp != NULL && *versionp == NULL);
|
|
||||||
|
|
||||||
*versionp = NULL;
|
*versionp = NULL;
|
||||||
}
|
}
|
||||||
@@ -191,18 +178,20 @@ static dns_result_t
|
|||||||
newversion(dns_db_t *db, dns_dbversion_t **versionp) {
|
newversion(dns_db_t *db, dns_dbversion_t **versionp) {
|
||||||
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
|
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
|
||||||
|
|
||||||
|
(void)versionp;
|
||||||
|
|
||||||
REQUIRE(VALID_RBTDB(rbtdb));
|
REQUIRE(VALID_RBTDB(rbtdb));
|
||||||
REQUIRE(versionp != NULL && *versionp == NULL);
|
|
||||||
|
|
||||||
return (DNS_R_NOTIMPLEMENTED);
|
return (DNS_R_NOTIMPLEMENTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
closeversion(dns_db_t *db, dns_dbversion_t **versionp) {
|
closeversion(dns_db_t *db, dns_dbversion_t **versionp, isc_boolean_t commit) {
|
||||||
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
|
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
|
||||||
|
|
||||||
|
(void)commit;
|
||||||
|
|
||||||
REQUIRE(VALID_RBTDB(rbtdb));
|
REQUIRE(VALID_RBTDB(rbtdb));
|
||||||
REQUIRE(versionp != NULL && *versionp != NULL);
|
|
||||||
|
|
||||||
*versionp = NULL;
|
*versionp = NULL;
|
||||||
}
|
}
|
||||||
@@ -218,7 +207,6 @@ findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
|
|||||||
isc_rwlocktype_t locktype = isc_rwlocktype_read;
|
isc_rwlocktype_t locktype = isc_rwlocktype_read;
|
||||||
|
|
||||||
REQUIRE(VALID_RBTDB(rbtdb));
|
REQUIRE(VALID_RBTDB(rbtdb));
|
||||||
REQUIRE(dns_name_issubdomain(name, &rbtdb->common.base));
|
|
||||||
|
|
||||||
dns_name_init(&foundname, NULL);
|
dns_name_init(&foundname, NULL);
|
||||||
RWLOCK(&rbtdb->tree_lock, locktype);
|
RWLOCK(&rbtdb->tree_lock, locktype);
|
||||||
@@ -309,8 +297,6 @@ findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
|||||||
(void)version;
|
(void)version;
|
||||||
|
|
||||||
REQUIRE(VALID_RBTDB(rbtdb));
|
REQUIRE(VALID_RBTDB(rbtdb));
|
||||||
REQUIRE(DNS_RDATASET_VALID(rdataset));
|
|
||||||
REQUIRE(rdataset->methods == NULL);
|
|
||||||
|
|
||||||
LOCK(&rbtdb->node_locks[rbtnode->locknum].lock);
|
LOCK(&rbtdb->node_locks[rbtnode->locknum].lock);
|
||||||
for (header = rbtnode->data; header != NULL; header = header->next) {
|
for (header = rbtnode->data; header != NULL; header = header->next) {
|
||||||
@@ -357,7 +343,7 @@ findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
|||||||
|
|
||||||
static dns_result_t
|
static dns_result_t
|
||||||
addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
||||||
dns_rdataset_t *rdataset, dns_addmode_t mode)
|
dns_rdataset_t *rdataset)
|
||||||
{
|
{
|
||||||
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
|
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
|
||||||
dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
|
dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
|
||||||
@@ -366,7 +352,6 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
|||||||
dns_result_t result;
|
dns_result_t result;
|
||||||
|
|
||||||
(void)version;
|
(void)version;
|
||||||
(void)mode;
|
|
||||||
|
|
||||||
REQUIRE(VALID_RBTDB(rbtdb));
|
REQUIRE(VALID_RBTDB(rbtdb));
|
||||||
|
|
||||||
@@ -399,6 +384,7 @@ deleterdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
|||||||
node = NULL;
|
node = NULL;
|
||||||
version = NULL;
|
version = NULL;
|
||||||
type = 0;
|
type = 0;
|
||||||
|
|
||||||
return (DNS_R_NOTIMPLEMENTED);
|
return (DNS_R_NOTIMPLEMENTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -424,6 +410,9 @@ add_rdataset_callback(dns_rdatacallbacks_t *callbacks, dns_name_t *name,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* The following is basically addrdataset(), with no locking.
|
* The following is basically addrdataset(), with no locking.
|
||||||
|
*
|
||||||
|
* XXX We should look for an rdataset of this type and merge if
|
||||||
|
* we find it.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx,
|
result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx,
|
||||||
@@ -470,8 +459,8 @@ load(dns_db_t *db, char *filename) {
|
|||||||
callbacks.commit = add_rdataset_callback;
|
callbacks.commit = add_rdataset_callback;
|
||||||
callbacks.commit_private = rbtdb;
|
callbacks.commit_private = rbtdb;
|
||||||
|
|
||||||
return (dns_master_load(filename, &rbtdb->common.base,
|
return (dns_master_load(filename, &rbtdb->common.origin,
|
||||||
&rbtdb->common.base, rbtdb->common.class,
|
&rbtdb->common.origin, rbtdb->common.class,
|
||||||
&soacount, &nscount, &callbacks,
|
&soacount, &nscount, &callbacks,
|
||||||
rbtdb->common.mctx));
|
rbtdb->common.mctx));
|
||||||
}
|
}
|
||||||
@@ -493,7 +482,6 @@ delete_callback(void *data, void *arg) {
|
|||||||
static dns_dbmethods_t methods = {
|
static dns_dbmethods_t methods = {
|
||||||
attach,
|
attach,
|
||||||
detach,
|
detach,
|
||||||
shutdown,
|
|
||||||
load,
|
load,
|
||||||
currentversion,
|
currentversion,
|
||||||
newversion,
|
newversion,
|
||||||
@@ -507,7 +495,7 @@ static dns_dbmethods_t methods = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
dns_result_t
|
dns_result_t
|
||||||
dns_rbtdb_create(isc_mem_t *mctx, dns_name_t *base, isc_boolean_t cache,
|
dns_rbtdb_create(isc_mem_t *mctx, dns_name_t *origin, isc_boolean_t cache,
|
||||||
dns_rdataclass_t class, unsigned int argc, char *argv[],
|
dns_rdataclass_t class, unsigned int argc, char *argv[],
|
||||||
dns_db_t **dbp)
|
dns_db_t **dbp)
|
||||||
{
|
{
|
||||||
@@ -517,6 +505,7 @@ dns_rbtdb_create(isc_mem_t *mctx, dns_name_t *base, isc_boolean_t cache,
|
|||||||
int i;
|
int i;
|
||||||
isc_region_t r1, r2;
|
isc_region_t r1, r2;
|
||||||
|
|
||||||
|
/* Keep the compiler happy. */
|
||||||
(void)argc;
|
(void)argc;
|
||||||
(void)argv;
|
(void)argv;
|
||||||
|
|
||||||
@@ -525,7 +514,9 @@ dns_rbtdb_create(isc_mem_t *mctx, dns_name_t *base, isc_boolean_t cache,
|
|||||||
return (DNS_R_NOMEMORY);
|
return (DNS_R_NOMEMORY);
|
||||||
memset(rbtdb, '\0', sizeof *rbtdb);
|
memset(rbtdb, '\0', sizeof *rbtdb);
|
||||||
rbtdb->common.methods = &methods;
|
rbtdb->common.methods = &methods;
|
||||||
rbtdb->common.cache = cache;
|
rbtdb->common.attributes = 0;
|
||||||
|
if (cache)
|
||||||
|
rbtdb->common.attributes |= DNS_DBATTR_CACHE;
|
||||||
rbtdb->common.class = class;
|
rbtdb->common.class = class;
|
||||||
rbtdb->common.mctx = mctx;
|
rbtdb->common.mctx = mctx;
|
||||||
|
|
||||||
@@ -577,10 +568,10 @@ dns_rbtdb_create(isc_mem_t *mctx, dns_name_t *base, isc_boolean_t cache,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make a copy of the base name.
|
* Make a copy of the origin name.
|
||||||
*/
|
*/
|
||||||
dns_name_init(&rbtdb->common.base, NULL);
|
dns_name_init(&rbtdb->common.origin, NULL);
|
||||||
dns_name_toregion(base, &r1);
|
dns_name_toregion(origin, &r1);
|
||||||
r2.base = isc_mem_get(mctx, r1.length);
|
r2.base = isc_mem_get(mctx, r1.length);
|
||||||
if (r2.base == NULL) {
|
if (r2.base == NULL) {
|
||||||
free_rbtdb(rbtdb);
|
free_rbtdb(rbtdb);
|
||||||
@@ -588,7 +579,7 @@ dns_rbtdb_create(isc_mem_t *mctx, dns_name_t *base, isc_boolean_t cache,
|
|||||||
}
|
}
|
||||||
r2.length = r1.length;
|
r2.length = r1.length;
|
||||||
memcpy(r2.base, r1.base, r1.length);
|
memcpy(r2.base, r1.base, r1.length);
|
||||||
dns_name_fromregion(&rbtdb->common.base, &r2);
|
dns_name_fromregion(&rbtdb->common.origin, &r2);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make the Red-Black Tree.
|
* Make the Red-Black Tree.
|
||||||
@@ -599,7 +590,6 @@ dns_rbtdb_create(isc_mem_t *mctx, dns_name_t *base, isc_boolean_t cache,
|
|||||||
return (dresult);
|
return (dresult);
|
||||||
}
|
}
|
||||||
|
|
||||||
rbtdb->shutting_down = ISC_FALSE;
|
|
||||||
rbtdb->references = 1;
|
rbtdb->references = 1;
|
||||||
|
|
||||||
/* XXX Version init here */
|
/* XXX Version init here */
|
||||||
|
Reference in New Issue
Block a user