]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Refactor cleanup code in the qp-trie for the forwarders table
authorOndřej Surý <ondrej@isc.org>
Thu, 17 Aug 2023 10:39:10 +0000 (12:39 +0200)
committerOndřej Surý <ondrej@isc.org>
Wed, 23 Aug 2023 13:49:17 +0000 (15:49 +0200)
Instead of duplicating the destroy_forwarders() code in the cleanup
sections, just call dns_forwarders_detach() every time - in case of
failure, the forwarders aren't going to be attached, and forwarders
object will be destroyed right away.

lib/dns/forward.c

index 77efc595d6fbb6b93c965c9ad8fdb7ffc0c72505..20fdc5d4fb5c7ff7e8131a97b833310ee8397ca6 100644 (file)
@@ -121,26 +121,8 @@ dns_fwdtable_addfwd(dns_fwdtable_t *fwdtable, const dns_name_t *name,
        dns_qp_compact(qp, DNS_QPGC_MAYBE);
        dns_qpmulti_commit(fwdtable->table, &qp);
 
-       if (result == ISC_R_SUCCESS) {
-               dns_forwarders_detach(&forwarders);
-       } else {
-               goto cleanup;
-       }
-
-       return (ISC_R_SUCCESS);
+       dns_forwarders_detach(&forwarders);
 
-cleanup:
-       while (!ISC_LIST_EMPTY(forwarders->fwdrs)) {
-               fwd = ISC_LIST_HEAD(forwarders->fwdrs);
-               ISC_LIST_UNLINK(forwarders->fwdrs, fwd, link);
-               if (fwd->tlsname != NULL) {
-                       dns_name_free(fwd->tlsname, fwdtable->mctx);
-                       isc_mem_put(fwdtable->mctx, fwd->tlsname,
-                                   sizeof(*fwd->tlsname));
-               }
-               isc_mem_put(fwdtable->mctx, fwd, sizeof(*fwd));
-       }
-       isc_mem_put(fwdtable->mctx, forwarders, sizeof(*forwarders));
        return (result);
 }
 
@@ -171,21 +153,8 @@ dns_fwdtable_add(dns_fwdtable_t *fwdtable, const dns_name_t *name,
        dns_qp_compact(qp, DNS_QPGC_MAYBE);
        dns_qpmulti_commit(fwdtable->table, &qp);
 
-       if (result == ISC_R_SUCCESS) {
-               dns_forwarders_detach(&forwarders);
-       } else {
-               goto cleanup;
-       }
-
-       return (ISC_R_SUCCESS);
+       dns_forwarders_detach(&forwarders);
 
-cleanup:
-       while (!ISC_LIST_EMPTY(forwarders->fwdrs)) {
-               fwd = ISC_LIST_HEAD(forwarders->fwdrs);
-               ISC_LIST_UNLINK(forwarders->fwdrs, fwd, link);
-               isc_mem_put(fwdtable->mctx, fwd, sizeof(*fwd));
-       }
-       isc_mem_put(fwdtable->mctx, forwarders, sizeof(*forwarders));
        return (result);
 }