From f7321615eaaf63461bd682513d2873d97ae31771 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Fri, 12 Jan 2001 10:20:05 +0000 Subject: [PATCH] 678. [bug] "tranfer-format one-answer;" could trigger an assertion failure. [RT #646] also removed unused structure element state from axfr structure. --- CHANGES | 2 ++ bin/named/xfrout.c | 11 ++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 1380ffc791..7587b268e8 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ + 678. [bug] "tranfer-format one-answer;" could trigger an assertion + failure. [RT #646] 677. [bug] dnssec-signzone would occasionally use the wrong ttl for database operations and fail. [RT #643] diff --git a/bin/named/xfrout.c b/bin/named/xfrout.c index fb357caa67..296c6eb6e3 100644 --- a/bin/named/xfrout.c +++ b/bin/named/xfrout.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: xfrout.c,v 1.90 2001/01/09 21:40:09 bwelling Exp $ */ +/* $Id: xfrout.c,v 1.91 2001/01/12 10:20:05 marka Exp $ */ #include @@ -99,6 +99,7 @@ struct db_rr_iterator { isc_result_t result; dns_db_t *db; dns_dbiterator_t *dbit; + isc_boolean_t paused; dns_dbversion_t *ver; isc_stdtime_t now; dns_dbnode_t *node; @@ -138,6 +139,7 @@ db_rr_iterator_init(db_rr_iterator_t *it, dns_db_t *db, dns_dbversion_t *ver, result = dns_db_createiterator(it->db, ISC_FALSE, &it->dbit); if (result != ISC_R_SUCCESS) return (result); + it->paused = ISC_FALSE; it->rdatasetit = NULL; dns_rdata_init(&it->rdata); dns_rdataset_init(&it->rdataset); @@ -194,6 +196,7 @@ db_rr_iterator_next(db_rr_iterator_t *it) { while (it->result == ISC_R_NOMORE) { dns_rdatasetiter_destroy(&it->rdatasetit); dns_db_detachnode(it->db, &it->node); + it->paused = ISC_TRUE; it->result = dns_dbiterator_next(it->dbit); if (it->result == ISC_R_NOMORE) { /* We are at the end of the entire database. */ @@ -225,7 +228,10 @@ db_rr_iterator_next(db_rr_iterator_t *it) { static void db_rr_iterator_pause(db_rr_iterator_t *it) { - dns_dbiterator_pause(it->dbit); + if (!it->paused) { + dns_dbiterator_pause(it->dbit); + it->paused = ISC_TRUE; + } } static void @@ -436,7 +442,6 @@ static rrstream_methods_t ixfr_rrstream_methods = { typedef struct axfr_rrstream { rrstream_t common; - int state; db_rr_iterator_t it; isc_boolean_t it_valid; } axfr_rrstream_t;