}
}
+static void
+mark_ancient(dns_slabheader_t *header) {
+ setttl(header, 0);
+ mark(header, DNS_SLABHEADERATTR_ANCIENT);
+ HEADERNODE(header)->dirty = 1;
+}
+
/*
* Caller must hold the node (write) lock.
*/
static void
expireheader(dns_slabheader_t *header, isc_rwlocktype_t *nlocktypep,
isc_rwlocktype_t *tlocktypep, dns_expire_t reason DNS__DB_FLARG) {
- setttl(header, 0);
- mark(header, DNS_SLABHEADERATTR_ANCIENT);
- HEADERNODE(header)->dirty = 1;
+ mark_ancient(header);
if (isc_refcount_current(&HEADERNODE(header)->erefs) == 0) {
qpcache_t *qpdb = (qpcache_t *)header->db;
}
dns_slabheader_destroy(&header);
} else {
- mark(header, DNS_SLABHEADERATTR_ANCIENT);
- HEADERNODE(header)->dirty = 1;
+ mark_ancient(header);
*header_prev = header;
}
} else {
* non-zero. This is so because 'node' is an
* argument to the function.
*/
- mark(header, DNS_SLABHEADERATTR_ANCIENT);
- HEADERNODE(header)->dirty = 1;
+ mark_ancient(header);
}
} else if (EXISTS(header) && !ANCIENT(header)) {
if (header->type == matchtype) {
qpcache_detach(&qpdb);
}
-static void
-mark_ancient(dns_slabheader_t *header) {
- setttl(header, 0);
- mark(header, DNS_SLABHEADERATTR_ANCIENT);
- HEADERNODE(header)->dirty = 1;
-}
-
/*%
* Clean up dead nodes. These are nodes which have no references, and
* have no data. They are dead but we could not or chose not to delete
newheader->next = topheader->next;
newheader->down = topheader;
topheader->next = newheader;
- qpnode->dirty = 1;
mark_ancient(header);
if (sigheader != NULL) {
mark_ancient(sigheader);
}
dns_slabheader_destroy(&header);
} else {
- dns__rbtdb_mark(header,
- DNS_SLABHEADERATTR_ANCIENT);
- RBTDB_HEADERNODE(header)->dirty = 1;
+ dns__rbtdb_mark_ancient(header);
*header_prev = header;
}
} else {
* non-zero. This is so because 'node' is an
* argument to the function.
*/
- dns__rbtdb_mark(header,
- DNS_SLABHEADERATTR_ANCIENT);
- RBTDB_HEADERNODE(header)->dirty = 1;
+ dns__rbtdb_mark_ancient(header);
}
} else if (EXISTS(header) && !ANCIENT(header)) {
if (header->type == matchtype) {
dns__cacherbt_expireheader(dns_slabheader_t *header,
isc_rwlocktype_t *tlocktypep,
dns_expire_t reason DNS__DB_FLARG) {
- dns__rbtdb_setttl(header, 0);
- dns__rbtdb_mark(header, DNS_SLABHEADERATTR_ANCIENT);
- RBTDB_HEADERNODE(header)->dirty = 1;
+ dns__rbtdb_mark_ancient(header);
if (isc_refcount_current(&RBTDB_HEADERNODE(header)->references) == 0) {
isc_rwlocktype_t nlocktype = isc_rwlocktype_write;
}
}
-static void
-mark_ancient(dns_slabheader_t *header) {
+void
+dns__rbtdb_mark_ancient(dns_slabheader_t *header) {
dns__rbtdb_setttl(header, 0);
dns__rbtdb_mark(header, DNS_SLABHEADERATTR_ANCIENT);
RBTDB_HEADERNODE(header)->dirty = 1;
topheader != NULL;
topheader = topheader->next)
{
- mark_ancient(topheader);
+ dns__rbtdb_mark_ancient(topheader);
}
goto find_header;
}
* The new rdataset is better. Expire the
* ncache entry.
*/
- mark_ancient(topheader);
+ dns__rbtdb_mark_ancient(topheader);
topheader = NULL;
goto find_header;
}
changed->dirty = true;
}
if (rbtversion == NULL) {
- mark_ancient(header);
+ dns__rbtdb_mark_ancient(header);
if (sigheader != NULL) {
- mark_ancient(sigheader);
+ dns__rbtdb_mark_ancient(sigheader);
}
}
if (rbtversion != NULL && !header_nx) {
expireheader = newheader;
}
- mark_ancient(expireheader);
+ dns__rbtdb_mark_ancient(expireheader);
/*
* FIXME: In theory, we should mark the RRSIG
* and the header at the same time, but there is
* Cache-specific functions that are called from rbtdb.c
*/
void
+dns__rbtdb_mark_ancient(dns_slabheader_t *header);
+void
dns__cacherbt_expireheader(dns_slabheader_t *header,
isc_rwlocktype_t *tlocktypep,
dns_expire_t reason DNS__DB_FLARG);