+2150. [bug] 'rrset-order cyclic' uniformly distribute the
+ starting point for the first response for a given
+ RRset. [RT #16655]
+
2149. [bug] isc_mem_checkdestroyed() failed to abort on
if there were still active memory contexts.
[RT #16672]
[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.239 2006/10/26 05:39:49 marka Exp $ */
+/* $Id: rbtdb.c,v 1.240 2007/02/26 23:15:17 marka Exp $ */
/*! \file */
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;
newheader->additional_auth = NULL;
newheader->additional_glue = NULL;
newheader->serial = rbtversion->serial;
newheader->trust = 0;
newheader->noqname = NULL;
- newheader->count = 0;
+ newheader->count = init_count++;
newheader->additional_auth = NULL;
newheader->additional_glue = NULL;
newheader->trust = rdataset->trust;
newheader->serial = 1;
newheader->noqname = NULL;
- newheader->count = 0;
+ newheader->count = init_count++;
newheader->additional_auth = NULL;
newheader->additional_glue = NULL;
if (newcbarg == NULL)
return (ISC_R_NOMEMORY);
newcbarg->type = type;
- newcbarg->count = count;
+ newcbarg->count = init_count;
newcbarg->header = header;
newcbarg->db = NULL;
dns_db_attach((dns_db_t *)rbtdb, &newcbarg->db);