2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-29 13:38:26 +00:00

1250. [bug] When processing events (non-threaded) only allow

the task one chance to use to use its quantum.
This commit is contained in:
Mark Andrews 2002-07-19 03:39:44 +00:00
parent ff30cdeb78
commit 0d993c02ba
3 changed files with 18 additions and 3 deletions

View File

@ -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 1249. [func] named-checkzone will now check if nameservers that
appear to be IP addresses. Available modes "fail", appear to be IP addresses. Available modes "fail",
"warn" (default) and "ignore" the results of the "warn" (default) and "ignore" the results of the

View File

@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * 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 #ifndef ISC_TYPES_H
#define ISC_TYPES_H 1 #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_socketmgr isc_socketmgr_t;
typedef struct isc_symtab isc_symtab_t; typedef struct isc_symtab isc_symtab_t;
typedef struct isc_task isc_task_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_taskmgr isc_taskmgr_t;
typedef struct isc_textregion isc_textregion_t; typedef struct isc_textregion isc_textregion_t;
typedef struct isc_time isc_time_t; typedef struct isc_time isc_time_t;

View File

@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * 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 * Principal Author: Bob Halley
@ -111,7 +111,7 @@ struct isc_taskmgr {
/* Locked by task manager lock. */ /* Locked by task manager lock. */
unsigned int default_quantum; unsigned int default_quantum;
LIST(isc_task_t) tasks; LIST(isc_task_t) tasks;
LIST(isc_task_t) ready_tasks; isc_tasklist_t ready_tasks;
#ifdef ISC_PLATFORM_USETHREADS #ifdef ISC_PLATFORM_USETHREADS
isc_condition_t work_available; isc_condition_t work_available;
isc_condition_t exclusive_granted; isc_condition_t exclusive_granted;
@ -726,6 +726,7 @@ dispatch(isc_taskmgr_t *manager) {
isc_task_t *task; isc_task_t *task;
#ifndef ISC_PLATFORM_USETHREADS #ifndef ISC_PLATFORM_USETHREADS
unsigned int total_dispatch_count = 0; unsigned int total_dispatch_count = 0;
isc_tasklist_t ready_tasks;
#endif /* ISC_PLATFORM_USETHREADS */ #endif /* ISC_PLATFORM_USETHREADS */
REQUIRE(VALID_MANAGER(manager)); REQUIRE(VALID_MANAGER(manager));
@ -780,6 +781,9 @@ dispatch(isc_taskmgr_t *manager) {
* unlocks. The while expression is always protected by the lock. * unlocks. The while expression is always protected by the lock.
*/ */
#ifndef ISC_PLATFORM_USETHREADS
ISC_LIST_INIT(ready_tasks);
#endif
LOCK(&manager->lock); LOCK(&manager->lock);
while (!FINISHED(manager)) { while (!FINISHED(manager)) {
#ifdef ISC_PLATFORM_USETHREADS #ifdef ISC_PLATFORM_USETHREADS
@ -965,11 +969,18 @@ dispatch(isc_taskmgr_t *manager) {
* were usually nonempty, the 'optimization' * were usually nonempty, the 'optimization'
* might even hurt rather than help. * might even hurt rather than help.
*/ */
#ifdef ISC_PLATFORM_USETHREADS
ENQUEUE(manager->ready_tasks, task, ENQUEUE(manager->ready_tasks, task,
ready_link); 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); UNLOCK(&manager->lock);
} }