From: Evan Hunt Date: Wed, 2 Nov 2022 12:55:50 +0000 (-0700) Subject: Fix control flow issues in zone.c X-Git-Tag: v9.19.9~47^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=24a81fefe6af5a28905cbb3141698c48bce05ed8;p=thirdparty%2Fbind9.git Fix control flow issues in zone.c 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. --- diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 1380bb3b701..eab42bf8c0e 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -11942,7 +11942,7 @@ static isc_result_t 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; @@ -11984,6 +11984,8 @@ redo: &zone->writeio); if (result != ISC_R_SUCCESS) { zone_idetach(&dummy); + } else { + async_write = true; } UNLOCK_ZONE(zone); } else { @@ -12013,8 +12015,12 @@ fail: } 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;