--- sys/src/cmd/ndb/dn.c
+++ sys/src/cmd/ndb/dn.c
@@ -621,7 +621,7 @@
/*
* mark all local db records about my area as authoritative,
- * time out any others
+ * delete those no longer in the database
*/
void
dnauthdb(void)
@@ -630,7 +630,7 @@
ulong minttl;
Area *area;
DN *dp;
- RR *rp;
+ RR *rp, **l;
lock(&dnlock);
@@ -638,19 +638,23 @@
for(i = 0; i < HTLEN; i++)
for(dp = ht[i]; dp; dp = dp->next){
area = inmyarea(dp->name);
- for(rp = dp->rr; rp; rp = rp->next)
+ l = &dp->rr;
+ for(rp = *l; rp; rp = *l){
if(rp->db){
+ /* timed out by dnagedb, not reread */
+ if(rp->expire == 0){
+ rrdelhead(l);
+ continue;
+ }
if(area){
minttl = area->soarr->soa->minttl;
if(rp->ttl < minttl)
rp->ttl = minttl;
rp->auth = 1;
- }
- if(rp->expire == 0){
- rp->db = 0;
- dp->referenced = now-Reserved-1;
}
}
+ l = &rp->next;
+ }
}
unlock(&dnlock);
|