From: Ondřej Surý Date: Thu, 17 Aug 2023 10:39:10 +0000 (+0200) Subject: Refactor cleanup code in the qp-trie for the forwarders table X-Git-Tag: v9.19.17~33^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2e3eae6b9192f742404676093195477eea4119a5;p=thirdparty%2Fbind9.git Refactor cleanup code in the qp-trie for the forwarders table 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. --- diff --git a/lib/dns/forward.c b/lib/dns/forward.c index 77efc595d6f..20fdc5d4fb5 100644 --- a/lib/dns/forward.c +++ b/lib/dns/forward.c @@ -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); }