]> git.ipfire.org Git - zone-sync.git/commitdiff
main: Call zone_done() when the XFR could not be started
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 18 May 2026 16:02:24 +0000 (16:02 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 18 May 2026 16:02:24 +0000 (16:02 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
main.c

diff --git a/main.c b/main.c
index d5baa5c42db78752bd5ad07d8c4a4a1319319127..07506d7b68cb04cd5b839542023bc586d326747f 100644 (file)
--- a/main.c
+++ b/main.c
@@ -264,6 +264,7 @@ static void transfer_done(dns_zone_t* zone, uint32_t* expireopt, isc_result_t re
 static int do_transfer(dns_zone_t* zone, uint32_t serial) {
        dns_xfrin_t* xfrin = NULL;
        dns_rdatatype_t xfrtype;
+       int r;
 
        // Try an incremental xfr if we have a serial
        if (serial) {
@@ -283,7 +284,21 @@ static int do_transfer(dns_zone_t* zone, uint32_t serial) {
                DNS_TRANSPORT_NONE, ctx.transport, ctx.tlsctx_cache, ctx.memctx, &xfrin);
 
        // Start the transfer
-       return dns_xfrin_start(xfrin, transfer_done);
+       r = dns_xfrin_start(xfrin, transfer_done);
+       switch (r) {
+               case ISC_R_SUCCESS:
+                       break;
+
+               default:
+                       ERROR("Failed to initialize zone transfer: %s\n", isc_result_totext(r));
+                       goto ERROR;
+       }
+
+       return r;
+
+ERROR:
+       zone_done(zone);
+       return r;
 }
 
 static isc_result_t zone_loaded(void* data) {