+2150. [bug] 'rrset-order cyclic' uniformly distribute the
+ starting point for the first response for a given
+ RRset. [RT #16655]
+
2147. [bug] libbind: remove potential buffer overflow from
hmac_link.c. [RT #16437]
[RT #6427]
1555. [func] 'rrset-order cyclic' no longer has a random starting
- point. [RT #7572]
+ point per query. [RT #7572]
1554. [bug] dig, host, nslookup failed when no nameservers
were specified in /etc/resolv.conf. [RT #8232]
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rbtdb.c,v 1.168.2.11.2.26 2006/03/02 23:18:20 marka Exp $ */
+/* $Id: rbtdb.c,v 1.168.2.11.2.27 2007/02/26 23:20:52 marka Exp $ */
/*
* Principal Author: Bob Halley
static void free_rbtdb(dns_rbtdb_t *rbtdb, isc_boolean_t log,
isc_event_t *event);
+/*%
+ * 'init_count' is used to initialize 'newheader->count' which inturn
+ * is used to determine where in the cycle rrset-order cyclic starts.
+ * We don't lock this as we don't care about simultanious updates.
+ *
+ * Note:
+ * Both init_count and header->count can be ISC_UINT32_MAX.
+ * The count on the returned rdataset however can't be as
+ * that indicates that the database does not implement cyclic
+ * processing.
+ */
+static unsigned int init_count;
+
/*
* Locking
*
raw = (unsigned char *)header + sizeof(*header);
rdataset->private3 = raw;
rdataset->count = header->count++;
- if (header->count == ISC_UINT32_MAX)
- header->count = 0;
+ if (rdataset->count == ISC_UINT32_MAX)
+ rdataset->count = 0;
/*
* Reset iterator state.
rdataset->covers);
newheader->attributes = 0;
newheader->noqname = NULL;
- newheader->count = 0;
+ newheader->count = init_count++;
newheader->trust = rdataset->trust;
if (rbtversion != NULL) {
newheader->serial = rbtversion->serial;
newheader->serial = rbtversion->serial;
newheader->trust = 0;
newheader->noqname = NULL;
- newheader->count = 0;
+ newheader->count = init_count++;
LOCK(&rbtdb->node_locks[rbtnode->locknum].lock);
newheader->trust = rdataset->trust;
newheader->serial = 1;
newheader->noqname = NULL;
- newheader->count = 0;
+ newheader->count = init_count++;
result = add(rbtdb, node, rbtdb->current_version, newheader,
DNS_DBADD_MERGE, ISC_TRUE, NULL, 0);