Lines Matching defs:rbtdbiter

5113 	rbtdb_dbiterator_t *rbtdbiter;
5117 rbtdbiter = isc_mem_get(rbtdb->common.mctx, sizeof(*rbtdbiter));
5118 if (rbtdbiter == NULL)
5121 rbtdbiter->common.methods = &dbiterator_methods;
5122 rbtdbiter->common.db = NULL;
5123 dns_db_attach(db, &rbtdbiter->common.db);
5124 rbtdbiter->common.relative_names =
5126 rbtdbiter->common.magic = DNS_DBITERATOR_MAGIC;
5127 rbtdbiter->common.cleaning = ISC_FALSE;
5128 rbtdbiter->paused = ISC_TRUE;
5129 rbtdbiter->tree_locked = isc_rwlocktype_none;
5130 rbtdbiter->result = ISC_R_SUCCESS;
5131 dns_fixedname_init(&rbtdbiter->name);
5132 dns_fixedname_init(&rbtdbiter->origin);
5133 rbtdbiter->node = NULL;
5134 rbtdbiter->delete = 0;
5135 rbtdbiter->nsec3only = ISC_TF((options & DNS_DB_NSEC3ONLY) != 0);
5136 rbtdbiter->nonsec3 = ISC_TF((options & DNS_DB_NONSEC3) != 0);
5137 memset(rbtdbiter->deletions, 0, sizeof(rbtdbiter->deletions));
5138 dns_rbtnodechain_init(&rbtdbiter->chain, db->mctx);
5139 dns_rbtnodechain_init(&rbtdbiter->nsec3chain, db->mctx);
5140 if (rbtdbiter->nsec3only)
5141 rbtdbiter->current = &rbtdbiter->nsec3chain;
5143 rbtdbiter->current = &rbtdbiter->chain;
5145 *iteratorp = (dns_dbiterator_t *)rbtdbiter;
7770 reference_iter_node(rbtdb_dbiterator_t *rbtdbiter) {
7771 dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
7772 dns_rbtnode_t *node = rbtdbiter->node;
7777 INSIST(rbtdbiter->tree_locked != isc_rwlocktype_none);
7778 reactivate_node(rbtdb, node, rbtdbiter->tree_locked);
7782 dereference_iter_node(rbtdb_dbiterator_t *rbtdbiter) {
7783 dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
7784 dns_rbtnode_t *node = rbtdbiter->node;
7793 rbtdbiter->tree_locked, ISC_FALSE);
7796 rbtdbiter->node = NULL;
7800 flush_deletions(rbtdb_dbiterator_t *rbtdbiter) {
7802 dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
7807 if (rbtdbiter->delete != 0) {
7817 rbtdbiter->delete,
7820 if (rbtdbiter->tree_locked == isc_rwlocktype_read) {
7825 rbtdbiter->tree_locked = isc_rwlocktype_write;
7827 for (i = 0; i < rbtdbiter->delete; i++) {
7828 node = rbtdbiter->deletions[i];
7834 rbtdbiter->tree_locked, ISC_FALSE);
7838 rbtdbiter->delete = 0;
7843 rbtdbiter->tree_locked = isc_rwlocktype_read;
7846 rbtdbiter->tree_locked = isc_rwlocktype_none;
7852 resume_iteration(rbtdb_dbiterator_t *rbtdbiter) {
7853 dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
7855 REQUIRE(rbtdbiter->paused);
7856 REQUIRE(rbtdbiter->tree_locked == isc_rwlocktype_none);
7859 rbtdbiter->tree_locked = isc_rwlocktype_read;
7861 rbtdbiter->paused = ISC_FALSE;
7866 rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)(*iteratorp);
7867 dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db;
7870 if (rbtdbiter->tree_locked == isc_rwlocktype_read) {
7872 rbtdbiter->tree_locked = isc_rwlocktype_none;
7874 INSIST(rbtdbiter->tree_locked == isc_rwlocktype_none);
7876 dereference_iter_node(rbtdbiter);
7878 flush_deletions(rbtdbiter);
7880 dns_db_attach(rbtdbiter->common.db, &db);
7881 dns_db_detach(&rbtdbiter->common.db);
7883 dns_rbtnodechain_reset(&rbtdbiter->chain);
7884 dns_rbtnodechain_reset(&rbtdbiter->nsec3chain);
7885 isc_mem_put(db->mctx, rbtdbiter, sizeof(*rbtdbiter));
7894 rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
7898 if (rbtdbiter->result != ISC_R_SUCCESS &&
7899 rbtdbiter->result != ISC_R_NOMORE)
7900 return (rbtdbiter->result);
7902 if (rbtdbiter->paused)
7903 resume_iteration(rbtdbiter);
7905 dereference_iter_node(rbtdbiter);
7907 name = dns_fixedname_name(&rbtdbiter->name);
7908 origin = dns_fixedname_name(&rbtdbiter->origin);
7909 dns_rbtnodechain_reset(&rbtdbiter->chain);
7910 dns_rbtnodechain_reset(&rbtdbiter->nsec3chain);
7912 if (rbtdbiter->nsec3only) {
7913 rbtdbiter->current = &rbtdbiter->nsec3chain;
7914 result = dns_rbtnodechain_first(rbtdbiter->current,
7917 rbtdbiter->current = &rbtdbiter->chain;
7918 result = dns_rbtnodechain_first(rbtdbiter->current,
7920 if (!rbtdbiter->nonsec3 && result == ISC_R_NOTFOUND) {
7921 rbtdbiter->current = &rbtdbiter->nsec3chain;
7922 result = dns_rbtnodechain_first(rbtdbiter->current,
7928 result = dns_rbtnodechain_current(rbtdbiter->current, NULL,
7929 NULL, &rbtdbiter->node);
7931 rbtdbiter->new_origin = ISC_TRUE;
7932 reference_iter_node(rbtdbiter);
7939 rbtdbiter->result = result;
7947 rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
7951 if (rbtdbiter->result != ISC_R_SUCCESS &&
7952 rbtdbiter->result != ISC_R_NOMORE)
7953 return (rbtdbiter->result);
7955 if (rbtdbiter->paused)
7956 resume_iteration(rbtdbiter);
7958 dereference_iter_node(rbtdbiter);
7960 name = dns_fixedname_name(&rbtdbiter->name);
7961 origin = dns_fixedname_name(&rbtdbiter->origin);
7962 dns_rbtnodechain_reset(&rbtdbiter->chain);
7963 dns_rbtnodechain_reset(&rbtdbiter->nsec3chain);
7966 if (rbtdbiter->nsec3only && !rbtdbiter->nonsec3) {
7967 rbtdbiter->current = &rbtdbiter->nsec3chain;
7968 result = dns_rbtnodechain_last(rbtdbiter->current,
7971 if (!rbtdbiter->nsec3only && result == ISC_R_NOTFOUND) {
7972 rbtdbiter->current = &rbtdbiter->chain;
7973 result = dns_rbtnodechain_last(rbtdbiter->current, rbtdb->tree,
7977 result = dns_rbtnodechain_current(rbtdbiter->current, NULL,
7978 NULL, &rbtdbiter->node);
7980 rbtdbiter->new_origin = ISC_TRUE;
7981 reference_iter_node(rbtdbiter);
7988 rbtdbiter->result = result;
7996 rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
8000 if (rbtdbiter->result != ISC_R_SUCCESS &&
8001 rbtdbiter->result != ISC_R_NOTFOUND &&
8002 rbtdbiter->result != ISC_R_NOMORE)
8003 return (rbtdbiter->result);
8005 if (rbtdbiter->paused)
8006 resume_iteration(rbtdbiter);
8008 dereference_iter_node(rbtdbiter);
8010 iname = dns_fixedname_name(&rbtdbiter->name);
8011 origin = dns_fixedname_name(&rbtdbiter->origin);
8012 dns_rbtnodechain_reset(&rbtdbiter->chain);
8013 dns_rbtnodechain_reset(&rbtdbiter->nsec3chain);
8015 if (rbtdbiter->nsec3only) {
8016 rbtdbiter->current = &rbtdbiter->nsec3chain;
8018 &rbtdbiter->node,
8019 rbtdbiter->current,
8021 } else if (rbtdbiter->nonsec3) {
8022 rbtdbiter->current = &rbtdbiter->chain;
8024 &rbtdbiter->node,
8025 rbtdbiter->current,
8031 rbtdbiter->current = &rbtdbiter->chain;
8033 &rbtdbiter->node,
8034 rbtdbiter->current,
8039 &node, &rbtdbiter->nsec3chain,
8043 rbtdbiter->node = node;
8044 rbtdbiter->current = &rbtdbiter->nsec3chain;
8052 result = dns_rbtnodechain_current(rbtdbiter->current, iname,
8055 rbtdbiter->new_origin = ISC_TRUE;
8056 reference_iter_node(rbtdbiter);
8060 rbtdbiter->node = NULL;
8063 rbtdbiter->result = result;
8067 tresult = dns_rbtnodechain_current(rbtdbiter->current, iname,
8070 rbtdbiter->new_origin = ISC_TRUE;
8071 reference_iter_node(rbtdbiter);
8074 rbtdbiter->node = NULL;
8077 rbtdbiter->node = NULL;
8079 rbtdbiter->result = (result == DNS_R_PARTIALMATCH) ?
8089 rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
8093 REQUIRE(rbtdbiter->node != NULL);
8095 if (rbtdbiter->result != ISC_R_SUCCESS)
8096 return (rbtdbiter->result);
8098 if (rbtdbiter->paused)
8099 resume_iteration(rbtdbiter);
8101 name = dns_fixedname_name(&rbtdbiter->name);
8102 origin = dns_fixedname_name(&rbtdbiter->origin);
8103 result = dns_rbtnodechain_prev(rbtdbiter->current, name, origin);
8104 if (result == ISC_R_NOMORE && !rbtdbiter->nsec3only &&
8105 !rbtdbiter->nonsec3 &&
8106 &rbtdbiter->nsec3chain == rbtdbiter->current) {
8107 rbtdbiter->current = &rbtdbiter->chain;
8108 dns_rbtnodechain_reset(rbtdbiter->current);
8109 result = dns_rbtnodechain_last(rbtdbiter->current, rbtdb->tree,
8115 dereference_iter_node(rbtdbiter);
8118 rbtdbiter->new_origin = ISC_TF(result == DNS_R_NEWORIGIN);
8119 result = dns_rbtnodechain_current(rbtdbiter->current, NULL,
8120 NULL, &rbtdbiter->node);
8124 reference_iter_node(rbtdbiter);
8126 rbtdbiter->result = result;
8134 rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
8138 REQUIRE(rbtdbiter->node != NULL);
8140 if (rbtdbiter->result != ISC_R_SUCCESS)
8141 return (rbtdbiter->result);
8143 if (rbtdbiter->paused)
8144 resume_iteration(rbtdbiter);
8146 name = dns_fixedname_name(&rbtdbiter->name);
8147 origin = dns_fixedname_name(&rbtdbiter->origin);
8148 result = dns_rbtnodechain_next(rbtdbiter->current, name, origin);
8149 if (result == ISC_R_NOMORE && !rbtdbiter->nsec3only &&
8150 !rbtdbiter->nonsec3 && &rbtdbiter->chain == rbtdbiter->current) {
8151 rbtdbiter->current = &rbtdbiter->nsec3chain;
8152 dns_rbtnodechain_reset(rbtdbiter->current);
8153 result = dns_rbtnodechain_first(rbtdbiter->current,
8159 dereference_iter_node(rbtdbiter);
8162 rbtdbiter->new_origin = ISC_TF(result == DNS_R_NEWORIGIN);
8163 result = dns_rbtnodechain_current(rbtdbiter->current, NULL,
8164 NULL, &rbtdbiter->node);
8167 reference_iter_node(rbtdbiter);
8169 rbtdbiter->result = result;
8179 rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
8180 dns_rbtnode_t *node = rbtdbiter->node;
8182 dns_name_t *nodename = dns_fixedname_name(&rbtdbiter->name);
8183 dns_name_t *origin = dns_fixedname_name(&rbtdbiter->origin);
8185 REQUIRE(rbtdbiter->result == ISC_R_SUCCESS);
8186 REQUIRE(rbtdbiter->node != NULL);
8188 if (rbtdbiter->paused)
8189 resume_iteration(rbtdbiter);
8192 if (rbtdbiter->common.relative_names)
8197 if (rbtdbiter->common.relative_names && rbtdbiter->new_origin)
8206 *nodep = rbtdbiter->node;
8216 if (rbtdbiter->delete == DELETION_BATCH_MAX)
8217 flush_deletions(rbtdbiter);
8227 rbtdbiter->deletions[rbtdbiter->delete++] = node;
8241 rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
8243 if (rbtdbiter->result != ISC_R_SUCCESS &&
8244 rbtdbiter->result != ISC_R_NOMORE)
8245 return (rbtdbiter->result);
8247 if (rbtdbiter->paused)
8250 rbtdbiter->paused = ISC_TRUE;
8252 if (rbtdbiter->tree_locked != isc_rwlocktype_none) {
8253 INSIST(rbtdbiter->tree_locked == isc_rwlocktype_read);
8255 rbtdbiter->tree_locked = isc_rwlocktype_none;
8258 flush_deletions(rbtdbiter);
8265 rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
8266 dns_name_t *origin = dns_fixedname_name(&rbtdbiter->origin);
8268 if (rbtdbiter->result != ISC_R_SUCCESS)
8269 return (rbtdbiter->result);