Since dns_master_dump() can no longer return DNS_R_CONTINUE,
the error recovery code in synchronous calls to zone_dump() had
branches that could no longer be reached. This has been cleaned
up by using a boolean variable to determine whether the write
is asynchronous rather than depending on the result code.
zone_dump(dns_zone_t *zone, bool compact) {
isc_result_t result;
dns_dbversion_t *version = NULL;
- bool again;
+ bool again, async_write = false;
dns_db_t *db = NULL;
char *masterfile = NULL;
dns_masterformat_t masterformat = dns_masterformat_none;
&zone->writeio);
if (result != ISC_R_SUCCESS) {
zone_idetach(&dummy);
+ } else {
+ async_write = true;
}
UNLOCK_ZONE(zone);
} else {
}
masterfile = NULL;
- if (result == ISC_R_SUCCESS) {
- return (ISC_R_SUCCESS); /* XXXMPA */
+ if (async_write) {
+ /*
+ * Asyncronous write is in progress. Zone flags will get
+ * updated on completion. Cleanup is complete. We are done.
+ */
+ return (ISC_R_SUCCESS);
}
again = false;