]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add isc_taskmgr_detach when task is created while shutting down
authorOndřej Surý <ondrej@sury.org>
Mon, 10 May 2021 09:36:54 +0000 (11:36 +0200)
committerOndřej Surý <ondrej@sury.org>
Mon, 10 May 2021 09:39:51 +0000 (11:39 +0200)
When taskmgr is shutting down, the creating the task would attach
to the taskmgr, but don't detach on error condition.

lib/isc/include/isc/task.h
lib/isc/task.c

index 4883785a22fb373d04bb90ebba7c70bcacde0e58..33f064ffc7322bde56128de745bb141852b0d73c 100644 (file)
@@ -644,7 +644,7 @@ isc_task_privileged(isc_task_t *task);
 void
 isc_taskmgr_attach(isc_taskmgr_t *, isc_taskmgr_t **);
 void
-isc_taskmgr_detach(isc_taskmgr_t *);
+isc_taskmgr_detach(isc_taskmgr_t **);
 /*%<
  * Attach/detach the task manager.
  */
index 9849faeafc457cd475866a5d8583f6c809945925..abdcb56cdd8037f55659e9039ee2515861fe3db4 100644 (file)
@@ -193,7 +193,7 @@ task_finished(isc_task_t *task) {
        task->magic = 0;
        isc_mem_put(mctx, task, sizeof(*task));
 
-       isc_taskmgr_detach(manager);
+       isc_taskmgr_detach(&manager);
 }
 
 isc_result_t
@@ -265,6 +265,7 @@ isc_task_create_bound(isc_taskmgr_t *manager, unsigned int quantum,
 
        if (exiting) {
                isc_mutex_destroy(&task->lock);
+               isc_taskmgr_detach(&task->manager);
                isc_mem_put(manager->mctx, task, sizeof(*task));
                return (ISC_R_SHUTTINGDOWN);
        }
@@ -959,8 +960,12 @@ isc_taskmgr_attach(isc_taskmgr_t *source, isc_taskmgr_t **targetp) {
 }
 
 void
-isc_taskmgr_detach(isc_taskmgr_t *manager) {
-       REQUIRE(VALID_MANAGER(manager));
+isc_taskmgr_detach(isc_taskmgr_t **managerp) {
+       REQUIRE(managerp != NULL);
+       REQUIRE(VALID_MANAGER(*managerp));
+
+       isc_taskmgr_t *manager = *managerp;
+       *managerp = NULL;
 
        if (isc_refcount_decrement(&manager->references) == 1) {
                manager_free(manager);