also failed to handle the case where it had discovered that a node didn't
exist, had unlocked and relocked the tree (into write mode), and then had
attempted to add the node and got DNS_R_EXISTS as the result. (I.e. someone
beat us in the race to create the node.) In this case, an error would have
been returned. The correct behavior is to succeed (being sure to increment
the node reference count).
incorrectly treat it as if the IGNORE attribute were not set, and the add
would not work correctly. Rdatasets marked IGNORE are now ignored.
subtractrdataset() also failed to ignore rdatasets, and didn't cover the
case where the rdataset was marked as nonexistent.
Add DNS_R_UNCHANGED results for dns_db_{add,delete}rdataset().
Add merge flag to dns_db_addrdataset().
The way add and delete work should now match the .h file comments.
The commit_ok and changed_list were sometimes being accessed without
holding the lock.
Comments in structure.
Do not allow an rdataset to be added to a non-writer version.
Do not allow closeversion() to commit a writer version unless the ref count
is one.
We were not incrementing the version ref count when creating an rdataset
iterator.
rollback_node() incorrectly required that node->references == 0. We cannot
assume that a node has no references when an update is rolled back. We now
mark any rolled back rdatasets with the RDATASET_ATTR_IGNORE attribute. When
the node eventually has a zero reference count, IGNOREd rdatasets will be
cleaned up. In the meantime, they will be ignored.
point. Specifically, we return a delegation in this case, except if glue is
OK, or if the caller is looking for NXT or KEY records.
SIG records are going to be a special case, so do not deal with them in the
zone find routine.
sometimes did not find the deepest zone cut. E.g. If you look for A records at
"com." then you should get a delegation for "com." and not one for ".".
In the various rdataset find routines, we sometimes attempted to bind the
rdataset even if the rdataset pointer was NULL.
Remove inline from a few functions. Add inline to a few others.
Add incomplete and not-yet-working dbiterator implementation.
Improve node reference count handling.
Opening and closing the current version more than once was breaking
due to incorrect garbage collection.
Some rbtdb values had not been getting initialized.
Improvements to add procedure.