]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1250. [bug] When processing events (non-threaded) only allow
authorMark Andrews <marka@isc.org>
Fri, 19 Jul 2002 03:39:44 +0000 (03:39 +0000)
committerMark Andrews <marka@isc.org>
Fri, 19 Jul 2002 03:39:44 +0000 (03:39 +0000)
                        the task one chance to use to use its quantum.

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

diff --git a/CHANGES b/CHANGES
index 2705d14d5c15a36a37f10dfef9c8feb7509d63a8..a539f2374551829cc3aacb7bd321025bb71263bf 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+1250.  [bug]           When processing events (non-threaded) only allow
+                       the task one chance to use to use its quantum.
+
 1249.  [func]          named-checkzone will now check if nameservers that
                        appear to be IP addresses.  Available modes "fail",
                        "warn" (default) and "ignore" the results of the
index f59ae3cd2289c0d45359e77e943b9f82c056f371..b30f55ee7fe9151d5263d7f85ddb12a85aff5784 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: types.h,v 1.32 2001/01/09 21:57:42 bwelling Exp $ */
+/* $Id: types.h,v 1.33 2002/07/19 03:39:44 marka Exp $ */
 
 #ifndef ISC_TYPES_H
 #define ISC_TYPES_H 1
@@ -78,6 +78,7 @@ typedef struct isc_socketevent                isc_socketevent_t;
 typedef struct isc_socketmgr           isc_socketmgr_t;
 typedef struct isc_symtab              isc_symtab_t;
 typedef struct isc_task                        isc_task_t;
+typedef ISC_LIST(isc_task_t)           isc_tasklist_t;
 typedef struct isc_taskmgr             isc_taskmgr_t;
 typedef struct isc_textregion          isc_textregion_t;
 typedef struct isc_time                        isc_time_t;
index 21a72e0e1e74834238d16b8256b47e60ccf94811..dba0f9fdad81feba053d8e3d34bd03d2317877a2 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: task.c,v 1.87 2002/03/29 01:25:04 marka Exp $ */
+/* $Id: task.c,v 1.88 2002/07/19 03:39:43 marka Exp $ */
 
 /*
  * Principal Author: Bob Halley
@@ -111,7 +111,7 @@ struct isc_taskmgr {
        /* Locked by task manager lock. */
        unsigned int                    default_quantum;
        LIST(isc_task_t)                tasks;
-       LIST(isc_task_t)                ready_tasks;
+       isc_tasklist_t                  ready_tasks;
 #ifdef ISC_PLATFORM_USETHREADS
        isc_condition_t                 work_available;
        isc_condition_t                 exclusive_granted;
@@ -726,6 +726,7 @@ dispatch(isc_taskmgr_t *manager) {
        isc_task_t *task;
 #ifndef ISC_PLATFORM_USETHREADS
        unsigned int total_dispatch_count = 0;
+       isc_tasklist_t ready_tasks;
 #endif /* ISC_PLATFORM_USETHREADS */
 
        REQUIRE(VALID_MANAGER(manager));
@@ -780,6 +781,9 @@ dispatch(isc_taskmgr_t *manager) {
         * unlocks.  The while expression is always protected by the lock.
         */
 
+#ifndef ISC_PLATFORM_USETHREADS
+       ISC_LIST_INIT(ready_tasks);
+#endif
        LOCK(&manager->lock);
        while (!FINISHED(manager)) {
 #ifdef ISC_PLATFORM_USETHREADS
@@ -965,11 +969,18 @@ dispatch(isc_taskmgr_t *manager) {
                                 * were usually nonempty, the 'optimization'
                                 * might even hurt rather than help.
                                 */
+#ifdef ISC_PLATFORM_USETHREADS
                                ENQUEUE(manager->ready_tasks, task,
                                        ready_link);
+#else
+                               ENQUEUE(ready_tasks, task, ready_link);
+#endif
                        }
                }
        }
+#ifndef ISC_PLATFORM_USETHREADS
+       ISC_LIST_APPENDLIST(manager->ready_tasks, ready_tasks, ready_link);
+#endif
        UNLOCK(&manager->lock);
 }