]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1742. [bug] If isc_taskmgr_create() was not able to create the
authorMark Andrews <marka@isc.org>
Fri, 15 Oct 2004 00:45:34 +0000 (00:45 +0000)
committerMark Andrews <marka@isc.org>
Fri, 15 Oct 2004 00:45:34 +0000 (00:45 +0000)
                        requested number of worker threads then destruction
                        of the manager would trigger an INSIST() failure.
                        [RT #12790]

CHANGES
lib/isc/task.c

diff --git a/CHANGES b/CHANGES
index 9837b17779b6857fb6b60dd3efee7e192eb2977f..480a042be0c96507b8fdfbd32832e0d914119100 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -8,8 +8,11 @@
 
 1743.  [placeholder]   rt12790
 
-1742.  [placeholder]   rt12788
-
+1742.  [bug]           If isc_taskmgr_create() was not able to create the
+                       requested number of worker threads then destruction
+                       of the manager would trigger an INSIST() failure.
+                       [RT #12790]
+                       
 1741.  [bug]           Deleting all records at a node in a secure zone
                        using a update-policy grant failed. [RT #12787]
 
index 6a0e90990bbd5e475b8631bd75690193a04e866e..44f77b69f632be0af79e0e36e80b88d54a1c5017 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: task.c,v 1.91 2004/03/05 05:10:50 marka Exp $ */
+/* $Id: task.c,v 1.92 2004/10/15 00:45:34 marka Exp $ */
 
 /*
  * Principal Author: Bob Halley
@@ -105,8 +105,8 @@ struct isc_taskmgr {
        unsigned int                    magic;
        isc_mem_t *                     mctx;
        isc_mutex_t                     lock;
-       unsigned int                    workers;
 #ifdef ISC_PLATFORM_USETHREADS
+       unsigned int                    workers;
        isc_thread_t *                  threads;
 #endif /* ISC_PLATFORM_USETHREADS */
        /* Locked by task manager lock. */
@@ -1025,8 +1025,7 @@ manager_free(isc_taskmgr_t *manager) {
 #ifdef ISC_PLATFORM_USETHREADS
        (void)isc_condition_destroy(&manager->exclusive_granted);       
        (void)isc_condition_destroy(&manager->work_available);
-       isc_mem_put(manager->mctx, manager->threads,
-                   manager->workers * sizeof(isc_thread_t));
+       isc_mem_free(manager->mctx, manager->threads);
 #endif /* ISC_PLATFORM_USETHREADS */
        DESTROYLOCK(&manager->lock);
        manager->magic = 0;
@@ -1067,7 +1066,6 @@ isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers,
                return (ISC_R_NOMEMORY);
        manager->magic = TASK_MANAGER_MAGIC;
        manager->mctx = NULL;
-       manager->workers = 0;
        if (isc_mutex_init(&manager->lock) != ISC_R_SUCCESS) {
                UNEXPECTED_ERROR(__FILE__, __LINE__,
                                 "isc_mutex_init() %s",
@@ -1077,7 +1075,9 @@ isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers,
                goto cleanup_mgr;
        }
 #ifdef ISC_PLATFORM_USETHREADS
-       manager->threads = isc_mem_get(mctx, workers * sizeof(isc_thread_t));
+       manager->workers = 0;
+       manager->threads = isc_mem_allocate(mctx,
+                                           workers * sizeof(isc_thread_t));
        if (manager->threads == NULL) {
                result = ISC_R_NOMEMORY;
                goto cleanup_lock;
@@ -1107,7 +1107,6 @@ isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers,
        manager->tasks_running = 0;
        manager->exclusive_requested = ISC_FALSE;
        manager->exiting = ISC_FALSE;
-       manager->workers = 0;
 
        isc_mem_attach(mctx, &manager->mctx);
 
@@ -1144,7 +1143,7 @@ isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers,
  cleanup_workavailable:
        (void)isc_condition_destroy(&manager->work_available);
  cleanup_threads:
-       isc_mem_put(mctx, manager->threads, workers * sizeof(isc_thread_t));
+       isc_mem_free(mctx, manager->threads);
  cleanup_lock:
        DESTROYLOCK(&manager->lock);
 #endif