From: Michał Kępień Date: Thu, 15 Feb 2018 19:31:51 +0000 (+0100) Subject: Only clear DNS_ZONEFLG_LOADPENDING in zone_asyncload() if zone loading is completed... X-Git-Tag: v9.12.1rc1~4^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c64547d9591eeb8c6c3e426a9816752cddf699a;p=thirdparty%2Fbind9.git Only clear DNS_ZONEFLG_LOADPENDING in zone_asyncload() if zone loading is completed immediately zone_load() is not always synchronous, it may only initiate an asynchronous load and return DNS_R_CONTINUE, which means zone loading has not yet been completed. In such a case, zone_asyncload() must not clear DNS_ZONEFLG_LOADPENDING immediately and leave that up to zone_postload(). --- diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 99a03afd048..183e11a8e80 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -2191,9 +2191,11 @@ zone_asyncload(isc_task_t *task, isc_event_t *event) { goto cleanup; } - zone_load(zone, 0, ISC_TRUE); + result = zone_load(zone, 0, ISC_TRUE); - DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_LOADPENDING); + if (result != DNS_R_CONTINUE) { + DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_LOADPENDING); + } UNLOCK_ZONE(zone); /* Inform the zone table we've finished loading */