Merge branch '3230-remove-task-exclusive-mode-from-ns_clientmgr-v9_18' into 'v9_18'

Remove task exclusive mode from ns_clientmgr [v9.18]

See merge request isc-projects/bind9!6187
This commit is contained in:
Ondřej Surý 2022-04-26 14:40:42 +00:00
commit 0cdb2f497a
3 changed files with 5 additions and 37 deletions

View file

@ -30,6 +30,9 @@
favor of rwlocked access to localhost and localnets
members of dns_aclenv_t structure. [GL #3229]
5842. [cleanup] Remove the task exclusive mode use in ns_clientmgr.
[GL #3230]
--- 9.18.2 released ---
5856. [bug] The "starting maxtime timer" message related to outgoing

View file

@ -2437,13 +2437,8 @@ clientmgr_destroy(ns_clientmgr_t *manager) {
dns_aclenv_detach(&manager->aclenv);
isc_mutex_destroy(&manager->lock);
isc_mutex_destroy(&manager->reclock);
if (manager->excl != NULL) {
isc_task_detach(&manager->excl);
}
isc_task_detach(&manager->task);
ns_server_detach(&manager->sctx);
@ -2464,13 +2459,6 @@ ns_clientmgr_create(ns_server_t *sctx, isc_taskmgr_t *taskmgr,
manager = isc_mem_get(mctx, sizeof(*manager));
*manager = (ns_clientmgr_t){ .magic = 0, .mctx = mctx };
result = isc_taskmgr_excltask(taskmgr, &manager->excl);
if (result != ISC_R_SUCCESS) {
isc_mem_put(mctx, manager, sizeof(*manager));
return (result);
}
isc_mutex_init(&manager->lock);
isc_mutex_init(&manager->reclock);
manager->taskmgr = taskmgr;
@ -2479,7 +2467,6 @@ ns_clientmgr_create(ns_server_t *sctx, isc_taskmgr_t *taskmgr,
dns_aclenv_attach(aclenv, &manager->aclenv);
manager->exiting = false;
result = isc_task_create_bound(manager->taskmgr, 20, &manager->task,
manager->tid);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
@ -2502,33 +2489,16 @@ ns_clientmgr_create(ns_server_t *sctx, isc_taskmgr_t *taskmgr,
void
ns_clientmgr_destroy(ns_clientmgr_t **managerp) {
isc_result_t result;
ns_clientmgr_t *manager;
bool unlock = false;
REQUIRE(managerp != NULL);
REQUIRE(VALID_MANAGER(*managerp));
manager = *managerp;
*managerp = NULL;
REQUIRE(VALID_MANAGER(manager));
MTRACE("destroy");
/*
* Check for success because we may already be task-exclusive
* at this point. Only if we succeed at obtaining an exclusive
* lock now will we need to relinquish it later.
*/
result = isc_task_beginexclusive(manager->excl);
if (result == ISC_R_SUCCESS) {
unlock = true;
}
manager->exiting = true;
if (unlock) {
isc_task_endexclusive(manager->excl);
}
if (isc_refcount_decrement(&manager->references) == 1) {
clientmgr_destroy(manager);
}

View file

@ -147,7 +147,6 @@ struct ns_clientmgr {
ns_server_t *sctx;
isc_taskmgr_t *taskmgr;
isc_timermgr_t *timermgr;
isc_task_t *excl;
isc_refcount_t references;
int tid;
@ -156,10 +155,6 @@ struct ns_clientmgr {
dns_aclenv_t *aclenv;
/* Lock covers manager state. */
isc_mutex_t lock;
bool exiting;
/* Lock covers the recursing list */
isc_mutex_t reclock;
client_list_t recursing; /*%< Recursing clients */