mirror of
https://github.com/isc-projects/bind9.git
synced 2026-04-24 23:57:30 -04:00
Merge branch 'aram/catz-light-refactoring-and-reference-count-tracing' into 'main'
Implement reference count tracing for dns_catz_zone_t and dns_catz_zones_t See merge request isc-projects/bind9!7570
This commit is contained in:
commit
94ee6f6672
6 changed files with 431 additions and 416 deletions
3
CHANGES
3
CHANGES
|
|
@ -1,3 +1,6 @@
|
|||
6112. [func] Add reference count tracing for dns_catz_zone_t and
|
||||
dns_catz_zones_t. [GL !7570]
|
||||
|
||||
6111. [cleanup] Move irs_resconf into libdns, and remove the
|
||||
now empty libirs. [GL !7463]
|
||||
|
||||
|
|
|
|||
|
|
@ -2881,7 +2881,7 @@ cleanup:
|
|||
cfg_obj_destroy(cfg->add_parser, &zoneconf);
|
||||
}
|
||||
dns_catz_entry_detach(cz->origin, &cz->entry);
|
||||
dns_catz_zone_detach(&cz->origin);
|
||||
dns_catz_detach_catz(&cz->origin);
|
||||
dns_view_detach(&cz->view);
|
||||
isc_mem_putanddetach(&cz->mctx, cz, sizeof(*cz));
|
||||
}
|
||||
|
|
@ -2955,7 +2955,7 @@ cleanup:
|
|||
dns_zone_detach(&zone);
|
||||
}
|
||||
dns_catz_entry_detach(cz->origin, &cz->entry);
|
||||
dns_catz_zone_detach(&cz->origin);
|
||||
dns_catz_detach_catz(&cz->origin);
|
||||
dns_view_detach(&cz->view);
|
||||
isc_mem_putanddetach(&cz->mctx, cz, sizeof(*cz));
|
||||
}
|
||||
|
|
@ -2987,7 +2987,7 @@ catz_run(dns_catz_entry_t *entry, dns_catz_zone_t *origin, dns_view_t *view,
|
|||
isc_mem_attach(view->mctx, &cz->mctx);
|
||||
|
||||
dns_catz_entry_attach(entry, &cz->entry);
|
||||
dns_catz_zone_attach(origin, &cz->origin);
|
||||
dns_catz_attach_catz(origin, &cz->origin);
|
||||
dns_view_attach(view, &cz->view);
|
||||
|
||||
isc_async_run(named_g_mainloop, action, cz);
|
||||
|
|
@ -3150,7 +3150,7 @@ static dns_catz_zonemodmethods_t ns_catz_zonemodmethods = {
|
|||
static isc_result_t
|
||||
configure_catz(dns_view_t *view, dns_view_t *pview, const cfg_obj_t *config,
|
||||
const cfg_obj_t *catz_obj) {
|
||||
const cfg_listelt_t *zone_element;
|
||||
const cfg_listelt_t *zone_element = NULL;
|
||||
const dns_catz_zones_t *old = NULL;
|
||||
bool pview_must_detach = false;
|
||||
isc_result_t result;
|
||||
|
|
@ -3163,9 +3163,6 @@ configure_catz(dns_view_t *view, dns_view_t *pview, const cfg_obj_t *config,
|
|||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
dns_catz_new_zones(&view->catzs, &ns_catz_zonemodmethods, view->mctx,
|
||||
named_g_loopmgr);
|
||||
|
||||
if (pview != NULL) {
|
||||
old = pview->catzs;
|
||||
} else {
|
||||
|
|
@ -3178,10 +3175,12 @@ configure_catz(dns_view_t *view, dns_view_t *pview, const cfg_obj_t *config,
|
|||
}
|
||||
|
||||
if (old != NULL) {
|
||||
dns_catz_catzs_detach(&view->catzs);
|
||||
dns_catz_catzs_attach(pview->catzs, &view->catzs);
|
||||
dns_catz_catzs_detach(&pview->catzs);
|
||||
dns_catz_attach_catzs(pview->catzs, &view->catzs);
|
||||
dns_catz_detach_catzs(&pview->catzs);
|
||||
dns_catz_prereconfig(view->catzs);
|
||||
} else {
|
||||
dns_catz_new_zones(view->mctx, named_g_loopmgr, &view->catzs,
|
||||
&ns_catz_zonemodmethods);
|
||||
}
|
||||
|
||||
while (zone_element != NULL) {
|
||||
|
|
|
|||
738
lib/dns/catz.c
738
lib/dns/catz.c
File diff suppressed because it is too large
Load diff
|
|
@ -13,6 +13,11 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
/*
|
||||
* Define this for reference count tracing in the unit
|
||||
*/
|
||||
#undef DNS_CATZ_TRACE
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
|
|
@ -144,7 +149,7 @@ dns_catz_entry_new(isc_mem_t *mctx, const dns_name_t *domain,
|
|||
*/
|
||||
|
||||
void
|
||||
dns_catz_entry_copy(dns_catz_zone_t *zone, const dns_catz_entry_t *entry,
|
||||
dns_catz_entry_copy(dns_catz_zone_t *catz, const dns_catz_entry_t *entry,
|
||||
dns_catz_entry_t **nentryp);
|
||||
/*%<
|
||||
* Allocate a new catz_entry and deep copy 'entry' into 'nentryp'.
|
||||
|
|
@ -170,7 +175,7 @@ dns_catz_entry_attach(dns_catz_entry_t *entry, dns_catz_entry_t **entryp);
|
|||
*/
|
||||
|
||||
void
|
||||
dns_catz_entry_detach(dns_catz_zone_t *zone, dns_catz_entry_t **entryp);
|
||||
dns_catz_entry_detach(dns_catz_zone_t *catz, dns_catz_entry_t **entryp);
|
||||
/*%<
|
||||
* Detach an entry, free if no further references
|
||||
*
|
||||
|
|
@ -209,14 +214,14 @@ ISC_REFCOUNT_DECL(dns_catz_zone);
|
|||
*/
|
||||
|
||||
isc_result_t
|
||||
dns_catz_new_zone(dns_catz_zones_t *catzs, dns_catz_zone_t **zonep,
|
||||
dns_catz_new_zone(dns_catz_zones_t *catzs, dns_catz_zone_t **catzp,
|
||||
const dns_name_t *name);
|
||||
/*%<
|
||||
* Allocate a new catz zone on catzs mctx
|
||||
*
|
||||
* Requires:
|
||||
* \li 'catzs' is a valid dns_catz_zones_t.
|
||||
* \li 'zonep' is not NULL and '*zonep' is NULL.
|
||||
* \li 'catzp' is not NULL and '*catzp' is NULL.
|
||||
* \li 'name' is a valid dns_name_t.
|
||||
*
|
||||
*/
|
||||
|
|
@ -318,13 +323,15 @@ struct dns_catz_zonemodmethods {
|
|||
};
|
||||
|
||||
void
|
||||
dns_catz_new_zones(dns_catz_zones_t **catzsp, dns_catz_zonemodmethods_t *zmm,
|
||||
isc_mem_t *mctx, isc_loopmgr_t *loopmgr);
|
||||
dns_catz_new_zones(isc_mem_t *mctx, isc_loopmgr_t *loopmgr,
|
||||
dns_catz_zones_t **catzsp, dns_catz_zonemodmethods_t *zmm);
|
||||
/*%<
|
||||
* Allocate a new catz_zones object, a collection storing all catalog zones
|
||||
* for a view.
|
||||
*
|
||||
* Requires:
|
||||
* \li 'mctx' is not NULL.
|
||||
* \li 'loopmgr' is not NULL.
|
||||
* \li 'catzsp' is not NULL and '*catzsp' is NULL.
|
||||
* \li 'zmm' is not NULL.
|
||||
*
|
||||
|
|
@ -353,25 +360,6 @@ dns_catz_get_zone(dns_catz_zones_t *catzs, const dns_name_t *name);
|
|||
* \li 'name' is a valid dns_name_t.
|
||||
*/
|
||||
|
||||
void
|
||||
dns_catz_catzs_attach(dns_catz_zones_t *catzs, dns_catz_zones_t **catzsp);
|
||||
/*%<
|
||||
* Attach 'catzs' to 'catzsp'.
|
||||
*
|
||||
* Requires:
|
||||
* \li 'catzs' is a valid dns_catz_zones_t.
|
||||
* \li 'catzsp' is not NULL and *catzsp is NULL.
|
||||
*/
|
||||
|
||||
void
|
||||
dns_catz_catzs_detach(dns_catz_zones_t **catzsp);
|
||||
/*%<
|
||||
* Detach 'catzsp', free if no further references.
|
||||
*
|
||||
* Requires:
|
||||
* \li 'catzsp' is not NULL and *catzsp is not NULL.
|
||||
*/
|
||||
|
||||
void
|
||||
dns_catz_catzs_set_view(dns_catz_zones_t *catzs, dns_view_t *view);
|
||||
/*%<
|
||||
|
|
@ -450,4 +438,43 @@ dns_catz_get_iterator(dns_catz_zone_t *catz, isc_ht_iter_t **itp);
|
|||
*
|
||||
*/
|
||||
|
||||
#ifdef DNS_CATZ_TRACE
|
||||
/* Compatibility macros */
|
||||
#define dns_catz_attach_catz(catz, catzp) \
|
||||
dns_catz_zone__attach(catz, catzp, __func__, __FILE__, __LINE__)
|
||||
#define dns_catz_detach_catz(catzp) \
|
||||
dns_catz_zone__detach(catzp, __func__, __FILE__, __LINE__)
|
||||
#define dns_catz_ref_catz(ptr) \
|
||||
dns_catz_zone__ref(ptr, __func__, __FILE__, __LINE__)
|
||||
#define dns_catz_unref_catz(ptr) \
|
||||
dns_catz_zone__unref(ptr, __func__, __FILE__, __LINE__)
|
||||
|
||||
#define dns_catz_attach_catzs(catzs, catzsp) \
|
||||
dns_catz_zones__attach(catzs, catzsp, __func__, __FILE__, __LINE__)
|
||||
#define dns_catz_detach_catzs(catzsp) \
|
||||
dns_catz_zones__detach(catzsp, __func__, __FILE__, __LINE__)
|
||||
#define dns_catz_ref_catzs(ptr) \
|
||||
dns_catz_zones__ref(ptr, __func__, __FILE__, __LINE__)
|
||||
#define dns_catz_unref_catzs(ptr) \
|
||||
dns_catz_zones__unref(ptr, __func__, __FILE__, __LINE__)
|
||||
|
||||
ISC_REFCOUNT_TRACE_DECL(dns_catz_zone);
|
||||
ISC_REFCOUNT_TRACE_DECL(dns_catz_zones);
|
||||
#else
|
||||
/* Compatibility macros */
|
||||
#define dns_catz_attach_catz(catz, catzp) dns_catz_zone_attach(catz, catzp)
|
||||
#define dns_catz_detach_catz(catzp) dns_catz_zone_detach(catzp)
|
||||
#define dns_catz_ref_catz(ptr) dns_catz_zone_ref(ptr)
|
||||
#define dns_catz_unref_catz(ptr) dns_catz_zone_unref(ptr)
|
||||
|
||||
#define dns_catz_attach_catzs(catzs, catzsp) \
|
||||
dns_catz_zones_attach(catzs, catzsp)
|
||||
#define dns_catz_detach_catzs(catzsp) dns_catz_zones_detach(catzsp)
|
||||
#define dns_catz_ref_catzs(ptr) dns_catz_zones_ref(ptr)
|
||||
#define dns_catz_unref_catzs(ptr) dns_catz_zones_unref(ptr)
|
||||
|
||||
ISC_REFCOUNT_DECL(dns_catz_zone);
|
||||
ISC_REFCOUNT_DECL(dns_catz_zones);
|
||||
#endif /* DNS_CATZ_TRACE */
|
||||
|
||||
ISC_LANG_ENDDECLS
|
||||
|
|
|
|||
|
|
@ -300,7 +300,7 @@ destroy(dns_view_t *view) {
|
|||
dns_rpz_detach_rpzs(&view->rpzs);
|
||||
}
|
||||
if (view->catzs != NULL) {
|
||||
dns_catz_catzs_detach(&view->catzs);
|
||||
dns_catz_detach_catzs(&view->catzs);
|
||||
}
|
||||
for (dlzdb = ISC_LIST_HEAD(view->dlz_searched); dlzdb != NULL;
|
||||
dlzdb = ISC_LIST_HEAD(view->dlz_searched))
|
||||
|
|
@ -548,7 +548,7 @@ dns_view_detach(dns_view_t **viewp) {
|
|||
}
|
||||
}
|
||||
if (view->catzs != NULL) {
|
||||
dns_catz_catzs_detach(&view->catzs);
|
||||
dns_catz_detach_catzs(&view->catzs);
|
||||
}
|
||||
if (view->ntatable_priv != NULL) {
|
||||
dns_ntatable_shutdown(view->ntatable_priv);
|
||||
|
|
|
|||
|
|
@ -1260,7 +1260,7 @@ zone_free(dns_zone_t *zone) {
|
|||
zone->rpz_num = DNS_RPZ_INVALID_NUM;
|
||||
}
|
||||
if (zone->catzs != NULL) {
|
||||
dns_catz_catzs_detach(&zone->catzs);
|
||||
dns_catz_detach_catzs(&zone->catzs);
|
||||
}
|
||||
zone_freedbargs(zone);
|
||||
|
||||
|
|
@ -1913,7 +1913,7 @@ zone_catz_enable(dns_zone_t *zone, dns_catz_zones_t *catzs) {
|
|||
INSIST(zone->catzs == NULL || zone->catzs == catzs);
|
||||
dns_catz_catzs_set_view(catzs, zone->view);
|
||||
if (zone->catzs == NULL) {
|
||||
dns_catz_catzs_attach(catzs, &zone->catzs);
|
||||
dns_catz_attach_catzs(catzs, &zone->catzs);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1934,7 +1934,7 @@ zone_catz_disable(dns_zone_t *zone) {
|
|||
if (zone->db != NULL) {
|
||||
dns_zone_catz_disable_db(zone, zone->db);
|
||||
}
|
||||
dns_catz_catzs_detach(&zone->catzs);
|
||||
dns_catz_detach_catzs(&zone->catzs);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue