*\li 'dctx' to be valid.
*/
-dns_dbversion_t *
-dns_dumpctx_version(dns_dumpctx_t *dctx);
-/*%<
- * Return the version handle (if any) of the database being dumped.
- *
- * Require:
- *\li 'dctx' to be valid.
- */
-
-dns_db_t *
-dns_dumpctx_db(dns_dumpctx_t *dctx);
-/*%<
- * Return the database being dumped.
+isc_result_t
+dns_dumpctx_serial(dns_dumpctx_t *dctx, uint32_t *serial);
+/*
+ * Return the serial number of the database being dumped.
*
* Require:
- *\li 'dctx' to be valid.
+ *\li The database being dumped is a zone, not a cache.
*/
/*@{*/
isc_mutex_t lock;
isc_refcount_t references;
atomic_bool canceled;
- bool do_date;
isc_stdtime_t now;
FILE *f;
dns_db_t *db;
}
}
-dns_dbversion_t *
-dns_dumpctx_version(dns_dumpctx_t *dctx) {
+isc_result_t
+dns_dumpctx_serial(dns_dumpctx_t *dctx, uint32_t *serial) {
REQUIRE(DNS_DCTX_VALID(dctx));
- return dctx->version;
-}
+ REQUIRE(!dns_db_iscache(dctx->db));
-dns_db_t *
-dns_dumpctx_db(dns_dumpctx_t *dctx) {
- REQUIRE(DNS_DCTX_VALID(dctx));
- return dctx->db;
+ return dns_db_getsoaserial(dctx->db, dctx->version, serial);
}
void
dctx->now = isc_stdtime_now();
dns_db_attach(db, &dctx->db);
- dctx->do_date = dns_db_iscache(dctx->db);
- if (dctx->do_date) {
+ if (dns_db_iscache(dctx->db)) {
(void)dns_db_getservestalettl(dctx->db,
&dctx->tctx.serve_stale_ttl);
+ } else if (version != NULL) {
+ dns_db_attachversion(dctx->db, version, &dctx->version);
+ } else {
+ dns_db_currentversion(dctx->db, &dctx->version);
}
if (dctx->format == dns_masterformat_text &&
}
isc_mutex_init(&dctx->lock);
-
- if (version != NULL) {
- dns_db_attachversion(dctx->db, version, &dctx->version);
- } else if (!dns_db_iscache(db)) {
- dns_db_currentversion(dctx->db, &dctx->version);
- }
isc_mem_attach(mctx, &dctx->mctx);
isc_refcount_init(&dctx->references, 1);
* incompatible with pre-RFC2540 software, so we omit
* it in the zone case.
*/
- if (dctx->do_date) {
+ if (dns_db_iscache(dctx->db)) {
fprintf(dctx->f, "; using a %u second stale ttl\n",
dctx->tctx.serve_stale_ttl);
result = dns_time32_totext(dctx->now, &buffer);
dump_done(void *arg, isc_result_t result) {
dns_zone_t *zone = arg;
dns_zone_t *secure = NULL;
- dns_db_t *db;
- dns_dbversion_t *version;
bool again = false;
bool compact = false;
uint32_t serial;
- isc_result_t tresult;
+ isc_result_t tresult = ISC_R_UNSET;
REQUIRE(DNS_ZONE_VALID(zone));
}
if (result == ISC_R_SUCCESS && zone->journal != NULL) {
- /*
- * We don't own these, zone->dctx must stay valid.
- */
- db = dns_dumpctx_db(zone->dumpctx);
- version = dns_dumpctx_version(zone->dumpctx);
- tresult = dns_db_getsoaserial(db, version, &serial);
+ tresult = dns_dumpctx_serial(zone->dumpctx, &serial);
+ }
+ if (tresult == ISC_R_SUCCESS) {
/*
* Handle lock order inversion.
*/
* If there is a secure version of this zone
* use its serial if it is less than ours.
*/
- if (tresult == ISC_R_SUCCESS && secure != NULL) {
+ if (secure != NULL) {
uint32_t sserial;
isc_result_t mresult;
}
ZONEDB_UNLOCK(&secure->dblock, isc_rwlocktype_read);
}
- if (tresult == ISC_R_SUCCESS && zone->xfr == NULL) {
+ if (zone->xfr == NULL) {
dns_db_t *zdb = NULL;
if (dns_zone_getdb(zone, &zdb) == ISC_R_SUCCESS) {
zone_journal_compact(zone, zdb, serial);
dns_db_detach(&zdb);
}
- } else if (tresult == ISC_R_SUCCESS) {
+ } else {
compact = true;
zone->compact_serial = serial;
}