#include <isc/print.h>
#include <isc/result.h>
#include <isc/task.h>
+#include <isc/thread.h>
#include <isc/util.h>
#include <dns/catz.h>
.zmm = zmm,
.magic = DNS_CATZ_ZONES_MAGIC };
- result = isc_task_create_bound(taskmgr, 0, &catzs->updater, 0);
+ result = isc_taskmgr_excltask(taskmgr, &catzs->updater);
if (result != ISC_R_SUCCESS) {
goto cleanup_task;
}
REQUIRE(catzs->zones == NULL);
catzs->magic = 0;
- isc_task_destroy(&catzs->updater);
+ isc_task_detach(&catzs->updater);
isc_mutex_destroy(&catzs->lock);
isc_refcount_destroy(&catzs->references);
REQUIRE(DNS_DB_VALID(db));
REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
- LOCK(&catzs->lock);
dns_db_updatenotify_unregister(db, dns_catz_dbupdate_callback, catzs);
- UNLOCK(&catzs->lock);
}
void
REQUIRE(DNS_DB_VALID(db));
REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
- LOCK(&catzs->lock);
dns_db_updatenotify_register(db, dns_catz_dbupdate_callback, catzs);
- UNLOCK(&catzs->lock);
}
static bool
goto exit;
}
+ INSIST(catz == oldcatz);
+
if (!is_active) {
/* This can happen during a reconfiguration. */
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
ISC_LOG_DEBUG(3),
"catz: update_from_db: new zone merged");
- /*
- * When we're doing reconfig and setting a new catalog zone
- * from an existing zone we won't have a chance to set up
- * update callback in zone_startload or axfr_makedb, but we will
- * call onupdate() artificially so we can register the callback here.
- */
- LOCK(&catzs->lock);
- if (!oldcatz->db_registered) {
- result = dns_db_updatenotify_register(
- updb, dns_catz_dbupdate_callback, oldcatz->catzs);
- if (result == ISC_R_SUCCESS) {
- oldcatz->db_registered = true;
- }
- }
- UNLOCK(&catzs->lock);
-
exit:
catz->updateresult = result;
}
dns_name_format(&catz->name, dname, DNS_NAME_FORMATSIZE);
+ /*
+ * When we're doing reconfig and setting a new catalog zone
+ * from an existing zone we won't have a chance to set up
+ * update callback in zone_startload or axfr_makedb, but we will
+ * call onupdate() artificially so we can register the callback
+ * here.
+ */
+ if (result == ISC_R_SUCCESS && !catz->db_registered) {
+ result = dns_db_updatenotify_register(
+ catz->db, dns_catz_dbupdate_callback, catz->catzs);
+ if (result == ISC_R_SUCCESS) {
+ catz->db_registered = true;
+ }
+ }
+
/* If there's no update pending, or if shutting down, finish. */
if (!catz->updatepending || atomic_load(&catz->catzs->shuttingdown)) {
goto done;
goto cleanup_rbt;
}
- result = isc_task_create_bound(taskmgr, 0, &rpzs->updater, 0);
+ result = isc_taskmgr_excltask(taskmgr, &rpzs->updater);
if (result != ISC_R_SUCCESS) {
goto cleanup_task;
}
if (rpzs->rbt != NULL) {
dns_rbt_destroy(&rpzs->rbt);
}
- isc_task_destroy(&rpzs->updater);
+ isc_task_detach(&rpzs->updater);
isc_mutex_destroy(&rpzs->maint_lock);
isc_rwlock_destroy(&rpzs->search_lock);
isc_mem_putanddetach(&rpzs->mctx, rpzs, sizeof(*rpzs));