]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add tasks_waiting field in taskqueue
authorWitold Kręcicki <wpk@isc.org>
Fri, 23 Nov 2018 17:04:07 +0000 (17:04 +0000)
committerWitold Kręcicki <wpk@isc.org>
Sat, 24 Nov 2018 22:32:36 +0000 (22:32 +0000)
lib/isc/task.c

index e4548d2210b01efee814d32b7a40db7a0dd0e8f2..f9005e5d48a01cc0603cd3e4027a1c39f03c9d26 100644 (file)
@@ -134,6 +134,7 @@ struct isc__taskqueue {
        isc_condition_t                 work_available;
        isc_thread_t                    thread;
        unsigned int                    threadid;
+       unsigned int                    tasks_waiting;
        isc__taskmgr_t                  *manager;
 };
 
@@ -931,6 +932,7 @@ pop_readyq(isc__taskmgr_t *manager, int c) {
 
        if (task != NULL) {
                DEQUEUE(manager->queues[c].ready_tasks, task, ready_link);
+               manager->queues[c].tasks_waiting--;
                if (ISC_LINK_LINKED(task, ready_priority_link)) {
                        DEQUEUE(manager->queues[c].ready_priority_tasks, task,
                                ready_priority_link);
@@ -949,6 +951,7 @@ pop_readyq(isc__taskmgr_t *manager, int c) {
 static inline void
 push_readyq(isc__taskmgr_t *manager, isc__task_t *task, int c) {
        ENQUEUE(manager->queues[c].ready_tasks, task, ready_link);
+       manager->queues[c].tasks_waiting++;
        if ((task->flags & TASK_F_PRIVILEGED) != 0) {
                ENQUEUE(manager->queues[c].ready_priority_tasks, task,
                        ready_priority_link);
@@ -1395,6 +1398,7 @@ isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers,
 
                manager->queues[i].manager = manager;
                manager->queues[i].threadid = i;
+               manager->queues[i].tasks_waiting = 0;
                RUNTIME_CHECK(isc_thread_create(run, &manager->queues[i],
                                                &manager->queues[i].thread)
                              == ISC_R_SUCCESS);